How to persist @ManyToMany relation - duplicate entry or detached entity

后端 未结 5 1907
一整个雨季
一整个雨季 2020-12-01 06:36

I want to persist my entity with ManyToMany relation. But i have some problem during persisting process.

My entities :

@Entity
@Table(name = \"USER\"         


        
5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-01 07:27

    Duplication Reason: Id is autogenerated, so every time a new role is being created. Use in this way :

    User

    @Entity
    @Table(name = "user")
    public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int user_Id;
    
    @Column(name = "email")
    private String email;
    
    @Column(name = "firstname")
    private String firstname; 
    
    @Column(name = "lastname")
    private String lastname;
    
    @Column(name = "password")
    private String password;
    
    @Column(name = "active")
    private int active;
    
    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(name="user_role", 
        joinColumns=@JoinColumn(name="user_Id"),
        inverseJoinColumns=@JoinColumn(name="role_Id"))
    private Set roles  = new HashSet<>();
    //Getter and Setter
    

    Role

    @Entity
    @Table(name="roles")
    public class Role {
    
     @Id
     @Column(name="role_Id")
     private int role_Id;
    
     @Column(name="role_name")
     private String role_name;
    
     @ManyToMany(mappedBy = "roles")
     private Set users= new HashSet<>();
    

    Controller (Should have added it to Service)

     @PutMapping("/addEmp")
       public String addEmp(@RequestBody User user) {
    
        String pass=passencoder.encode(user.getPassword());
        user.setPassword(pass);
        List roles =rolerepo.findAll();
        for(Role role: roles) 
            System.out.println("Roles"+ role.getRole_name());
        //user.setRoles(new HashSet < > (rolerepo.findAll()));
        userrepo.save(user);
    
    
        return "User Created";
    }
    

    Output

    Roles

    User_Role

    If you liked the answer please subscribeYoutube Channel Atquil

提交回复
热议问题