java - Embeddable 中的 JPA ElementCollection 未持久化
问题描述
我遇到了一个问题,我的 JPA@ElementCollection
表中没有任何内容。据我所知,我想我理解@ElementCollection
. 我的猜测是出现问题的原因是因为我有ElementCollection
一个Embeddable
对象。
一个简单的例子:
@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 中的调试信息
休眠 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 甚至没有生成insert into calculation_description...
我期望的 SQL(忽略额外的字段)
解决方案
经过数小时的反复试验,我能够通过初始化该descriptions
字段来解决我的问题:
private List<String> descriptions = Lists.newArrayList();
老实说,我不太确定为什么这实际上会有所作为,因此欢迎任何外部意见。
推荐阅读
- r - 使用子字符串将列乘以列
- validation - 验证多线性回归时间序列的替代方法
- apache-spark - Spark SQL Streaming 与 Kafka 和 Cassandra 集成。强制 Cassandra 根据需要阅读
- apache-karaf - Opendaylight 滚动升级
- python - Flask-Script 语法无效错误
- macos - 在 mac 上安装 erlang 但收到错误“发现加密可用的 openssl ...”,我该如何解决?
- php - 显示来自 MySQL 的图像而不是回显
- android - 当应用程序处于前台时,检查 MyFirebaseMessagingService 中的 Activity 信息
- python - threading.local 对象的深度复制子类抛出 TypeError: __init__() 在线程池中访问时恰好需要 2 个参数(给定 1 个)
- enums - 不同的暂停和主屏幕