我有一个带有孩子和父母的自引用实体。我有一个连接表来存储互斥的兄弟姐妹。在数据库中创建实体时,我得到了这个例外......
引起:org.springframework.orm.jpa.JpaSystemException:org.hibernate.PersistentObjectException:传递给persist的分离实体
主表将有
ID Text Parent
1 ABC null
2 CBD 1
3 XYZ 1
加入表应该
entity sibling
2 3
实体映射是否正确?
@Entity
public class TestEntity {
@id
@GeneratedValue
private int id;
private String Text;
@ManyToOne
private TestEntity parent;
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name="mutuallyExclusiveSiblings",
joinColumns={@JoinColumn(name="entity", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="sibling", referencedColumnName="id")})
private Set<TestEntity> exclusiveSiblings;
}
任何帮助实现这一点的人都表示赞赏。感谢。
答案 0 :(得分:0)
CascadeType.ALL
表示在带有TestEntity
个兄弟姐妹的TestEntity
上调用持久化将触发测试实体和兄弟测试实体的插入。
如果已填充的任何一个已填充,将导致错误,因为持久性仅适用于数据库中尚不存在的新创建的实体。
因此,如果要将新的TestEntity
链接到数据库中的现有兄弟姐妹,那么最好只在新TestEntity
上调用persist而不先添加子项。
此时新的TestEntity
将变为脏检查,您可以将其链接到现有的兄弟节点,这会在会话刷新时触发关联表中的插入。