hibernate多对多中间表数据生成详解mappedBy

关于这方面的文章很多,说的都很专业,有时候还真看不明白,或者看糊涂了;郑重声明:本人初学,有说的不当的大家多多包含,不过吐槽呢随便吐没事。

  我喜欢代码说事,请看代码:

 

[java]  view plain copy
  1. //用户类中角色映射关系  
  2.     @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})  
  3.     @JoinTable( name="loginuser_role", joinColumns = @JoinColumn(name = "userAccout"),   
  4.     inverseJoinColumns = @JoinColumn(name = "roleID"))  
  5.     private List<Role> role = new ArrayList<Role>();  

[java]  view plain copy
  1. //角色类用户映射关系  
  2.     @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "role")  
  3.     private List<LoginUser> loginUser = new ArrayList<LoginUser>();  
[java]  view plain copy
  1.   

        

代码详细说明略过,主要说明什么时候,中间表会存数据。代码解释如下:

 

[java]  view plain copy
  1. // 中间表插入了数据  
  2. //用户service层  
  3. UserService service = (UserService)ctx.getBean("userService");  
  4.   
  5. //用户  
  6. LoginUser u = new LoginUser();  
  7. u.setUserName("sdkjf");  
  8. u.setUserPasswd("sdf");  
  9. u.setUserAccout("d");  
  10.   
  11. //角色  
  12. Role r = new Role();  
  13. r.setRoleLeve(3);  
  14. r.setRoleName("sdklf");  
  15. List<Role> t = new ArrayList<Role>();  
  16. t.add(r);  
  17.   
  18. //把角色加到用户  
  19. u.setRole(t);  
  20. service.add(u);//保存  


[java]  view plain copy
  1. //中间表没有插入数据  
  2. //角色service  
  3. RoleService  service = (RoleService) ctx.getBean("roleService");  
  4.   
  5. //角色  
  6. Role r = new Role();  
  7. r.setRoleLeve(3);  
  8. r.setRoleName("sdklf");  
  9.   
  10. //用户  
  11. LoginUser u = new LoginUser();  
  12. u.setUserName("sdkjf");  
  13. u.setUserPasswd("sdf");  
  14. u.setUserAccout("d");  
  15.   
  16. List<LoginUser> lu =  new ArrayList<LoginUser>();  
  17. lu.add(u);  
  18.   
  19. //设置用户  
  20. r.setLoginUser(lu);  
  21.   
  22. service.add(r);//保存  


为何出现这样的情况,简单说明,因为在角色类中使用了mappedBy指向了用户对象中的role,这样的意思就是只能通过用户操作来做中间表(用户角色表)维护工作。如果不这样做,如上代码通过角色来做维护的时候,中间表是不会做任何数据修改工作的。


自己吐槽:1.为何hibernate做了这样的限制后,通过角色还能用户角色本表的插入工作,不提示任何错误,但是中间表就是没值(大神指教)

                  2.和第一问很相似,为何单单插入用户或者单单插入角色是可以的(就是我插入用户的时候我不设置角色,插入角色的时候我不设置用户。。。能成功,并且没有任何提示)。。。既然我设置了关系,应该每一个插入都是有校验的。。。不理解,大神指教



完事,第一次博文,如有用词不当格式不好欢迎吐槽。

你可能感兴趣的:(hibernate多对多中间表数据生成详解mappedBy)