@ElementCollection, @CollectionTable und Enum - Seltsam delete/insert-Verhalten

@Entity
public class User{

    @ElementCollection
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "SEC_USER_ROLES",
    joinColumns =
    @JoinColumn(name = "USER_ID", referencedColumnName = "ID"))
    @Column(name = "ROLE_NAME")
    private List<Role> roles;

    [...]

}

public enum Role {

    ROLE_SUPER_ADMIN,
    ROLE_ADMIN,
    ROLE_ARB,
    ROLE_AP;

    [...]
}

Mit diesem mapping, wenn ich versuche, löschen einer ROLLE, zum Beispiel ROLE_ARB, es endet immer mit dem löschen der Rolle und fügt es dann wieder.

DELETE FROM SEC_USER_ROLES WHERE ((USER_ID = ?) AND (ROLE_NAME = ?))

    bind => [9451, ROLE_ADMIN]

INSERT INTO SEC_USER_ROLES (USER_ID, ROLE_NAME) VALUES (?, ?)

    bind => [9451, ROLE_ADMIN]

Habe ich versucht das problem zu lösen mit @OrderColumn (name="USER_ID"), aber dann die Zuordnung der User_id ist nicht korrekt.

Jede Idee wäre willkommen.

Werden die Rollen dargestellt, die als selectManyCheckbox
Die ManagedBean bereitet der Person (Benutzer)

   ...
  List<String> selectedroles = this.getSelectedItems();
  List<Role> newroles = new ArrayList<Role>();
  if (selectedroles != null) {
  for (String r : selectedroles) {
  newroles.add(Role.valueOf(r));

            }
  getEntity().setRoles(newroles);
   ...    
  security.save(getEntity());

und der EJB-macht updates, wenn es eine bereits vorhandene Entität,

  EntityManager em;
    ...
  this.em.merge(user);

Also, wenn jemand hebt die Auswahl aller (zuvor ausgewählte) Rollen es ist immer einer Rolle Links in der Datenbank, die wird nicht gelöscht, da das löschen/einfügen von Verhalten, das ich beschrieben vor.

  • Könnten Sie uns zeigen, den verwendeten code zu entfernen, der Rolle des Benutzers aus. Sind Sie sicher, dass Sie nicht eine andere Referenz von der Liste irgendwo und re-add die Rolle hinein?
  • Ich bearbeitet die Frage mit den benötigten code. Ich bin sicher, dass ich nicht eine andere Referenz.
InformationsquelleAutor mejas | 2011-08-03
Schreibe einen Kommentar