Я пытаюсь удалить объекты, содержащие списки Integer, и получаю ConstraintViolationExceptions из-за внешнего ключа в таблице, созданной для хранения целых чисел. Похоже, что удаление не каскадно сопоставляется с коллекцией.
Я провел немало поисков, но все примеры, которые я видел, как это сделать, относятся к сопоставленной коллекции других сущностей, которые можно аннотировать; здесь я просто храню список Integer. Вот соответствующая выдержка из класса, который я храню:
@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;
}
Я удаляю объекты Changes с помощью @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");