java - Embeddable 中的 JPA ElementCollection 未持久化

标签 java hibernate jpa

我遇到了一个问题,即我的 JPA @ElementCollection 表中没有保留任何内容。 From what I can tell ,我想我理解了@ElementCollection的基本思想。我的猜测是,出现问题的原因是因为我在 Embeddable 对象中有一个 ElementCollection

一个简单的例子:

@Entity
public class CalculationHistory {

    private CalculationReason calculationReason;

    @Embedded
    public CalculationReason getCalculationReason() { return calculationReason; }

    protected void setCalculationReason(CalculationReason calculationReason {
        this.calculationReason = calculationReason;
    }
    ...
}

@Embeddable
public class CalculationReason {

    private List<String> descriptions;

    @ElementCollection
    @CollectionTable(name = "calculation_description", joinColumns = @JoinColumn("calculation_history_id"))
    @Column(name = "description")
    public List<String> getDescriptions() { return descriptions; }

    public void setDescriptions(List<String> descriptions) {
        this.descriptions = descriptions;
    }
    ...
}

有任何关于可能出现问题的线索吗?

<小时/>

编辑:附加信息

为了简洁起见,我将尝试使附加信息尽可能简短。

创建计算原因

public static CalculationReason create(List<String> descriptions) {
    return new CalculationReason(descriptions);
}

创建计算历史记录

public static CalculationHistory create(CalculationReason calculationReason) {
    CalculationHistory history = new CalculationHistory();
    history.setCalculationReason(calculationReason);
    ...
    return history;
} 

CalculationHistory#create 中的调试信息

Debug Info at CalculationHistory#create

Hibernate DAO 存储库

@Override
public <S extends E> S save(S entity) {
    return getHibernateTemplate().merge(getEntityClass().getName(), entity);
}

Hibernate 生成的 SQL

Hibernate: insert into calculation_history (created_date, modified_date, modified_by, reason, system) values (?, ?, ?, ?, ?)

看起来 Hibernate 甚至没有生成我期望的插入到calculation_description... SQL(忽略额外的字段)

最佳答案

经过几个小时的反复试验,我能够通过初始化 descriptions 字段解决我的问题:

 private List<String> descriptions = Lists.newArrayList();

老实说,我不太确定为什么这实际上会产生影响,因此欢迎任何外部意见。

关于java - Embeddable 中的 JPA ElementCollection 未持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51835604/

相关文章:

Java jbutton消息框冲突

java - 如何将 if/else if 代码中的整数转入该代码外部的整数? (java)

java - Hibernate 标准 addOrder 弄乱了结果

java - 将 Spring Data 审计注解与 @Embeddable 类一起使用

java - Spring Boot 集成测试抛出错误并且无法在另一个 Maven 模块中获取现有 bean

java - JFace 和 FieldEditor

从表中检索记录时,Hibernate异常: org. hibernate.hql.internal.ast.QuerySyntaxException

java - 在 JPA 中以一对一关系共享主键的情况下如何访问对象?

java - JPA - 我的命名查询不起作用

java - JPA/HQL - 查找具有一对多关系且包含一个或多个特定元素的行