Ich habe ein Problem, weil ich nicht weiß, wie bestimmte Rolle von Benutzer zu entfernen. Dieses Problem ist mit der unidirektionalen Beziehung in der Berechtigungsklasse verbunden. Dies sind nur relevante Code-Snippets.Entfernen von Entity mit unidirektionaler Beziehung @ManyToOne (JPA)
Klasse Person
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
private Collection<Role> roles;
Klasse Rolle
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long roleId;
@ManyToOne(fetch=FetchType.LAZY)
private User user;
habe ich versucht, spezifische Rolle von Benutzer auf diese Weise
user.getRoles().remove(roleToRemove)
entityManger.merge(user)
roleToRemove wurde aus Sammlung gelöscht zu entfernen, aber nicht aus Datebase. (Ich schrieb Test, der abgeschlossen wurde)
Also, ich
hinzugefügtorphanRemoval = true
Und zur Zeit ich habe Probleme mit unidirektionalen Beziehung, die in Berechtigungsklasse auftritt. Ich erhalte DatabaseExeption becouse idRole, die ich entfernen möchte, existiert in der Permission-Tabelle.
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long permissionId;
@ManyToOne(fetch=FetchType.LAZY)
private Role role;
Also, meine Frage ist, wie man mit diesem Problem fertig wird.
Haben Sie bemerkt, dass ich dies in meiner Antwort angesprochen habe - "Beziehungsinhaber" und "Aktualisierung der Beziehung von beiden Seiten"? Wenn Sie denken, dass mehr Details benötigt werden, sollten Sie auf meine Antwort geschrieben haben. Das Papageienspiel mit der Verbesserung des Schreibstils zu spielen, finde ich nicht als eine Demonstration des guten Geschmacks. –
Stil und Geschmack sind im Auge des Betrachters, aber Ihre Antwort ist nur halb richtig, da es nicht erwähnt, dass die Rolle zusammengeführt werden muss. Fühlen Sie sich frei, um Ihre Antwort mit mehr Informationen zu aktualisieren, wenn Sie möchten, dass es vollständig und nützlich für Menschen, die ähnliche Probleme auftreten können - Ich werde gerne meins entfernen, wenn Sie alles abdecken. Andernfalls kann das OP die "beste" Antwort entscheiden - schließlich ist dies der Grund, mehrere Antworten auf solchen Seiten zuzulassen. – Chris
Nun, das ist eine schreckliche Wahnvorstellung. Das Zusammenführen an beiden Enden ist 100% un notwendig. http://stackoverflow.com/questions/20068742/jpa-updating-bidirektionale-association Ich denke, dass Sie mir jetzt eine Stimme geben sollten, um Ihre Augen zu öffnen :) –