【发布时间】:2012-03-14 21:31:12
【问题描述】:
在我的应用程序中,休眠操作是这样的。 应用程序使用请求中的新值更新父实体,并删除所有现有(先前插入的)子实体并插入新的子记录。
我正在为此使用休眠 DELETE_ORPHAN,如下所示。
当我这样做时,我得到以下异常:
org.hibernate.HibernateException:一个集合 cascade="all-delete-orphan" 不再被拥有者引用 实体实例:com.childs
我看到了与该问题类似的线程,并尝试在这些线程中应用解决方案。但这没有用
我的父实体
public class Parent implements Serializable {
@Column(name = "PARENT_ID")
@Basic(fetch = FetchType.EAGER)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
@SequenceGenerator(name = "seq", sequenceName = "seq")
private Integer parentId; //primary key of parent
.......
........
//mapping to child entity
@OneToMany(mappedBy = "parent", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Child> childs;
................
...............
}
子实体有一个组合键,有一个PK实体如下所示
public class ChildPK implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -447592368963477750L;
/** . */
@ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinColumns( { @JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID") })
@Id
private Parent parent;
/**. */
@Column(name = "CHILD_ID")
@Basic(fetch = FetchType.EAGER)
@Id
@GenericGenerator(name="child_seq", strategy="com.DB2Dialect")
@GeneratedValue(generator="child_seq")
private Integer childId;
}
child entity goes like this:
public class Child implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 185670997643552301L;
/** The pol cntct id. */
@Column(name = "CHILD_ID")
@Basic(fetch = FetchType.EAGER)
@Id
private Integer childId;
@ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinColumns( { @JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID") })
@Id
private Parent parent;
}
Java 代码
...................
..............
parent.getChild().clear();
Child child = new Child();
parent.setChild(child);
这里可能有什么问题。
提前谢谢...
【问题讨论】:
标签: hibernate