2017-08-14 79 views
1

我用我谟春引导和弹簧数据:传递给persist的分离实体:com.carpooling.entity.Role;嵌套的例外是org.hibernate作为

@Entity 
public class User { 
    vate Long  id; 
    private String  firstName; 
    private String  familyName; 
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "user_role", joinColumns = { 
     @JoinColumn(name = "USER_ID", nullable = false, updatable = false) }, inverseJoinColumns = { 
       @JoinColumn(name = "ROLE_ID", nullable = false, updatable = false) }) 
private List<Role> roles; 
//getters and setters 
} 

角色类:

@Entity 
public class Role { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long  id; 
    private String  roleName; 

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles") 
    private List<User> users; 
    //getters and setters 
} 

添加用户梅索德:

public User AddUser(User user) { 
    // TODO Auto-generated method stub 
    List<Role> roles = user.getRoles(); 
    user.setRoles(roles); 
    return userRepsitory.save(user); 
} 

当我尝试添加它给我上述错误的新用户,继承人的JSON对象发送:

{ “名字”: “FFF”, “familyName”: “FFFF”, “角色”:[{ “ID”:1},{ “ID”:2}] }

+0

你不应该更换收集。只删除并添加到它。 – Bart

+0

@Bart那也就没有什么区别实际上 –

+0

@AmerQarabsa只是一个预防措施,而不是解决方案。我刚刚评论,因为我看到OP使用setter进行收集。这是错误的秘诀。 – Bart

回答

0

因为你是级联一个没有管理实体,如果实体确实有ID(如你的情况)JPA会认为他们是分离的实体,你需要或者让他们管理,你可以简单地从数据库中获取的角色和使用提供的ID 。

public User AddUser(User user) { 
// TODO Auto-generated method stub 
List<Role> roles = new ArrayList<Role>(); 
for(Role entry :user.getRoles()) 
    roles.add(roleDao.findOne(entry.getId())); 
user.setRoles(roles); 
return userRepsitory.save(user); 
} 
+0

我必须要改变的财产以后的代码? –

+0

@imsiimsi检查我更新 –

+0

非常感谢阿米尔Qarabsa你昨天和today..keep帮助两次去你正在做一项伟大的工作 –

相关问题