【发布时间】:2017-10-23 12:59:59
【问题描述】:
我正在添加一个包含附加数据的交集表,并且我使用 @EmbeddedId 为受此表中的记录绑定的实体(entity1 和 entity2)。
我想在保存实体 1 时通过级联保存所有数据。所以,这就是为什么在实体 1 中我有:
@OneToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
fetch = FetchType.LAZY, mappedBy = "id.entity1")
private List<Entity1ToEntity2Link> links = new ArrayList<>();
在 Entity1ToEntity2Link 我有 @EmbeddedId 并且在其中我有两个实体的链接。但是,我希望在保存实体 1 时保存第二个。所以,我这样做了:
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Entity2 entity2;
但是,不幸的是,我在@EmbeddedId 中的级联似乎被忽略了。我可以看到没有生成用于插入的 sql,并且在保存 Entity1ToEntity2Link 时出现错误:
违反 - 未找到父键
我怀疑@EmbeddedId 不支持级联。但是,我不确定。在保存 Entity1ToEntity2Link 之前,您有什么想法可以保存 entity2 吗?
Id 对象:
@Embeddable
public class LinkId extends AbstractLinkId {
//...
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Entity2 entity2;
//...
}
@MappedSuperclass
public class AbstractLinkId {
//...
@ManyToOne
private Entity1 entity1;
//...
}
【问题讨论】:
标签: java hibernate jpa jpa-2.0 hibernate-cascade