Dans mon application, une opération hibernate se déroule comme suit. L'application met à jour une entité parent avec les nouvelles valeurs de la requête et supprime toutes les entités enfants existantes (précédemment insérées) et insère de nouveaux enregistrements enfants.
J'utilise des hibernations DELETE_ORPHAN
pour cela, comme vous pouvez le voir ci-dessous.
Lorsque je fais cela, j'obtiens l'exception suivante :
org.hibernate.HibernateException : Une collection avec cascade="all-delete-orphan" n'était plus référencée par la collection propriétaire. l'instance d'entité propriétaire : com.childs
J'ai vu des fils de discussion similaires avec ce problème, et j'ai essayé d'appliquer des solutions dans ces fils de discussion. Mais cela n'a pas fonctionné
Mon entité parentale
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;
................
...............
}
L'entité Child a une clé combinée et une entité PK, comme indiqué ci-dessous.
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;
}
Code Java
...................
..............
parent.getChild().clear();
Child child = new Child();
parent.setChild(child);
Qu'est-ce qui pourrait être faux ici.
Merci d'avance...