I Einheiten haben folgende:JPA: löschen Eltern mit verwandten Kindern
@Entity
@Table(name = "chat",
uniqueConstraints = {
@UniqueConstraint(columnNames = {"user_1", "user_2"})
})
public class Chat {
@ManyToOne
@JoinColumn(name = "user_1")
@OnDelete(action = OnDeleteAction.CASCADE)
private User user1;
@ManyToOne
@JoinColumn(name = "user_2")
@OnDelete(action = OnDeleteAction.CASCADE)
private User user2;
}
Benutzerklasse:
@Entity
@Table(name="users",
uniqueConstraints={
@UniqueConstraint(columnNames={"company_id", "username"})
}
)
public class User {
@Id
@GenericGenerator(name = "uuid-gen", strategy = "uuid2")
@GeneratedValue(generator = "uuid-gen",strategy=GenerationType.IDENTITY)
private String id;
// there is no field/reference to Chat entity
}
und Benutzer Einheit ohne irgendwelche Referenzen Einheit Chat. Ich muss den Benutzer mit seinen Chats entfernen. Das Problem ist, dass die Benutzer-ID (die ich entfernen mag) entweder in user1
oder user2
Feld sein könnte. Zum Beispiel habe ich Benutzer A und B. Sie C. haben plaudern Und wenn ich versuche, zu entfernen, zum Beispiel Benutzer A, sollte den Benutzer A und Chat C. Aber mit spezifischer Konfiguration, ich habe folgende Fehler entfernen:
Cannot delete or update a parent row: a foreign key constraint fails
(`mydb`.`chat`, CONSTRAINT `FKqslncg7pcc89gvjjpp9jypbha`
FOREIGN KEY (`user_2`) REFERENCES `users` (`id`))
Als mögliche Lösung verwendete ich this answer. Aber die Verwendung von
entityManager.remove(user);
entityManager.clear();
hilft nicht. Außerdem habe ich den ddl-Code überprüft und Cascade-Aktionen werden nicht erwähnt. Wie behebt man das?
Sie, wenn Sie das übergeordnete löschen, werden alle verwandten „abhängigen“ Entitäten zu müssen gelöscht werden, wenn das der Fall ist, lesen Sie bitte [diese] (https://stackoverflow.com/questions/18813341/what- ist-der-Differenz-zwischen-Kaskade-und-orphan-removal-from-db) orphanRemoval –
@MahmoudAlSiksek verwendet, wird dies nicht helfen. Ich verwende verschiedene Annotationen und habe keine Referenzen auf Kinder in der Elternklasse –