Transaktion abgebrochen, wenn Sie versuchen zu bestehen Benutzer

Ich bin versucht zu retten, ein Benutzer. Die Entität " Benutzer-und Gruppen-Entität verfügt über eine bidirektionale viele-zu-viele-Beziehung. Aber die Gruppen sind bereits in der Datenbank gespeichert (nur zwei aber: administrator und Benutzer).

Hier habe ich nur "fake" die Gruppe, die schon besteht, weil ich dachte, das würde funktionieren. Ich kann nicht fügen Sie die cascade = CascadeType.PERSIST für den Benutzer, weil dann würde es speichern Sie die Gruppe wieder, verursacht doppelten Daten. Wie würde ich dieses Problem beheben?

Vom EJB -

public void persistAsUser(User user) {
    Group group = new Group(2L, "user");
    user.addGroup(group);

    userRepository.persist(user);
}

javax.ejb.EJBException: Transaktion abgebrochen

Verursacht durch: java.lang.IllegalStateException: Während der Synchronisierung ein
neues Objekt wurde gefunden durch eine Beziehung, die nicht markiert war
cascade-PERSIST:


Hier sind die Entitäten:

    @Entity
    @Table(name = "app_user")
    public class User implements Serializable {

        public static final String ALL = "User.all";

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String firstName;
        private String lastName;
        private Integer age;
        private String username;
        private String email;
        private String password;

        @ManyToMany(mappedBy = "users")
        private List<Group> groups;

        ....

public void addGroup(Group group) {

    if (!getGroups().contains(group)) {
        getGroups().add(group);
    }

    if (!group.getUsers().contains(this)) {
        group.getUsers().add(this);
    }
}
}

und

@Entity
    public class Group implements Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String groupName;

        @ManyToMany
        @JoinTable(joinColumns = {@JoinColumn(name="group_id")}, inverseJoinColumns = {@JoinColumn(name="user_id")})
        private List<User> users;

       ....

}
können Sie nicht einfach nicht Auffüllen der Gruppen-Eigenschaft in der Entität "Benutzer"?
Aber Tue ich das? Ich habe eine Gruppe für den Benutzer, aber ich nicht beibehalten, denn es ist bereits in der Datenbank persistiert.
legen Sie Gruppen auf null, das ist, was ich sage
Und wie würde dann der Benutzer weiß, welcher Gruppe er gehört? Wie würden JPA wissen, wie die Zuordnung der userid und groupid in der join-Tabelle?
Dann, was ich tun würde, ist das abrufen der Gruppe, der Sie den Benutzer hinzufügen möchten, fügen Sie den Benutzer hinzu, und speichern Sie die Gruppe. Sie müssen natürlich angeben, cascading für die Zusammenführung in der Gruppe -> Benutzer-Beziehung.

InformationsquelleAutor LuckyLuke | 2012-01-20

Schreibe einen Kommentar