Bonjour,

J'ai le mapping suivant :

Nom : Mapping.png
Affichages : 1639
Taille : 12,0 Ko

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
@Entity
@Table(name = "authorities")
public class Authorities implements Serializable {
 
    @EmbeddedId
    protected AuthoritiesPK authoritiesPK;
 
    @ManyToOne
    @JoinColumn(name = "username", insertable = false, updatable = false)
    private Users users;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
@Embeddable
public class AuthoritiesPK implements Serializable {
 
    @Column(name = "username")
    private String username;
    @Column(name = "authority")
    private String authority;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Entity
@Table(name = "users")
public class Users implements Serializable {
 
    @Id
    @Column(name = "username")
    private String username;
    @Column(name = "password")
    private String password;
    @Column(name = "enabled")
    private Boolean enabled;
    @Column(name = "email")
    private String email;
 
    @OneToMany(mappedBy = "users", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Authorities> authoritiesList;
J'ai l’erreur suivante quand je modifie un utilisateur ?

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: entity.Authorities.users -> entity.Users

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
    public Users modifyUser(Users pUser, List<String> listAuthorities) {
 
        EntityTransaction tx = getEM().getTransaction();
        tx.begin();
        if (pUser.getAuthoritiesList() != null) {
 
            List<Authorities> authoritieses = pUser.getAuthoritiesList();
            for (Authorities a : authoritieses) {
                a.setUsers(null);
                getEM().remove(a);
            }
            pUser.getAuthoritiesList().clear();
            for (String authoritie : listAuthorities) {
                addAuthorities(authoritie, pUser);
            }
            pUser = getEM().merge(pUser);
 
        }
        getEM().remove(pUser);
        tx.commit();
        return pUser;
    }