Deleting JPA entity containing @CollectionOfElements throws ConstraintViolationException
Posted
by Lyle
on Stack Overflow
See other posts from Stack Overflow
or by Lyle
Published on 2010-06-15T22:14:06Z
Indexed on
2010/06/16
21:22 UTC
Read the original article
Hit count: 593
I'm trying to delete entities which contain lists of Integer, and I'm getting ConstraintViolationExceptions because of the foreign key on the table generated to hold the integers. It appears that the delete isn't cascading to the mapped collection.
I've done quite a bit of searching, but all of the examples I've seen on how to accomplish this are in reference to a mapped collection of other entities which can be annotated; here I'm just storing a list of Integer. Here is the relevant excerpt from the class I'm storing:
@Entity
@Table(name="CHANGE_IDS")
@GenericGenerator(
name = "CHANGE_ID_GEN",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name="sequence_name", value="course_changes_seq"),
@Parameter(name="increment_size", value="5000"),
@Parameter(name=" optimizer", value="pooled")
}
)
@NamedQueries ({
@NamedQuery(
name="Changes.getByStatus",
query= "SELECT c " +
"FROM DChanges c " +
"WHERE c.status = :status "),
@NamedQuery(
name="Changes.deleteByStatus",
query= "DELETE " +
"FROM Changes c " +
"WHERE c.status = :status ")
})
public class Changes {
@Id
@GeneratedValue(generator="CHANGE_ID_GEN")
@Column(name = "ID")
private final long id;
@Enumerated(EnumType.STRING)
@Column(name = "STATUS", length = 20, nullable = false)
private final Status status;
@Column(name="DOC_ID")
@org.hibernate.annotations.CollectionOfElements
@org.hibernate.annotations.IndexColumn(name="DOC_ID_ORDER")
private List<Integer> docIds;
}
I'm deleting the Changes objects using a @NamedQuery:
final Query deleteQuery = this.entityManager.createNamedQuery("Changes.deleteByStatus");
deleteQuery.setParameter("status", Status.POST_FLIP);
final int deleted = deleteQuery.executeUpdate();
this.logger.info("Deleted " + deleted + " POST_FLIP Changes");
© Stack Overflow or respective owner