@嵌入ID
为被此表中的记录绑定的实体创建复杂ID(
和
实体2
我想在保存实体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中的级联似乎被忽略了。我可以看到insert的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;
//...
}