我遇到了一个问题,即我的 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 中的调试信息
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/