Referenzielle Integrität-constraint-Verletzung auf join-Tabelle-Datensatz löschen
Habe ich eine viele-zu-viele-Beziehung zwischen Benutzern und Gruppen.
@Entity
class User {
@OneToMany(cascade = CascadeType.ALL, mappedBy = 'id.user')
Set<GroupMembership> memberships
}
@Entity
class Group {
@OneToMany(cascade = CascadeType.ALL, mappedBy = 'id.group')
Set<GroupMembership> members
}
@Entity
class GroupMembership {
@Embeddable
static class IdKey implements Serializable {
@ManyToOne
@JoinColumn(name = 'userId')
User user
@ManyToOne
@JoinColumn(name = 'groupId')
Group group
}
@EmbeddedId
IdKey id = new IdKey()
}
Ich möchte in der Lage sein, so löschen Sie einen Benutzer oder eine Gruppe und alle damit verbundenen GroupMemberships entfernt werden. Jedoch, wenn ich versuche zu löschen Sie einen Benutzer oder eine Gruppe, bekomme ich ein:
org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation: "FK_96K9TDEV9PO6Q3ISOYIJPWAQU: PUBLIC.GROUP_MEMBERSHIPS FOREIGN KEY(GROUP_ID) REFERENCES PUBLIC.GROUP(ID) (1)"; SQL statement:
delete from group where id=? [23503-186]
Ich bin mit Hibernate 4.3.8 und Spring Data JPA-1.7.2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Natürlich, trotz der Suche nach einer Antwort für Stunden, ich es herausfinden innerhalb einer Stunde nach der Buchung dieser Frage.
Hinzufügen der Hibernate-Implementierung spezifische @OnDelete annotation schien es zu beheben. Anscheinend ist der cascade-Eigenschaft auf @OneToMany nur Effekte, die den EntityManager und macht es nicht in das generierte DDL.