浅析Hibernate集合映射inverse和cascade

Hibernate有很多值得学习的地方,这里我们主要了解和测试Hibernate cascade和Hibernate inverse,希望对大家的学习有所帮助。

目前成都创新互联已为超过千家的企业提供了网站建设、域名、网页空间、网站运营、企业网站设计、安康网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1: Hibernate inverse

在Hibernate annotation 中inverse 默认值是"true" 当配置了mappedBy="…"时就相当于inverse="false"了。

2: Hibernate cascade

CascadeType类中有这样几个常量,ALL、PERSIST、MERGE、REFRESH、REMOVE 。

让代码说话吧:

 
 
 
  1. @Entity 
  2. @Table(name = "Users") 
  3. public class User implements java.io.Serializable { 
  4.  
  5.  
  6.     private String id; 
  7.  
  8.     private Rose rose; 
  9.  
  10.     public User() { 
  11.     } 
  12.  
  13.     @Id 
  14.     @Column(name = "Id", unique = true, nullable = false, insertable = true, updatable = true, length = 5) 
  15.     public String getId() { 
  16.         return this.id; 
  17.     } 
  18.  
  19.     public void setId(String id) { 
  20.         this.id = id; 
  21.     } 
  22.  
  23.     @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY) 
  24.     @JoinColumn(name = "Roseid", unique = false, nullable = false, insertable = true, updatable = true) 
  25.     public Rose getRose() { 
  26.         return this.rose; 
  27.     } 
  28.  
  29.     public void setRose(Rose rose) { 
  30.         this.rose = rose; 
  31.     } 
  32. } 
  33.  
  34. @Entity 
  35. @Table(name = "Rose") 
  36. public class Rose implements java.io.Serializable { 
  37.  
  38.     private String id; 
  39.  
  40.     private Set users = new HashSet(0); 
  41.  
  42.     public Rose() { 
  43.     } 
  44.  
  45.     @Id 
  46.     @Column(name = "Id", unique = true, nullable = false, insertable = true, updatable = true, length = 3) 
  47.     public String getId() { 
  48.         return this.id; 
  49.     } 
  50.  
  51.     public void setId(String id) { 
  52.         this.id = id; 
  53.     } 
  54.  
  55.     @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER ) 
  56.     @JoinColumn(name="RoseId") 
  57.     public Set getUsers() { 
  58.         return this.users; 
  59.     } 
  60.  
  61.     public void setUsers(Set userses) { 
  62.         this.users = userses; 
  63.     } 
  64.  
  65.     public void addUser(User user) { 
  66.         user.setRose(this); 
  67.         users.add(user); 
  68.     } 

当在user类中配置成cascade = { CascadeType.PERSIST, CascadeType.MERGE } 时,更新和删除两个级联时:

 
 
 
  1. Hibernate: select user_.Id, user_.Enabledel as Enabledel1_, user_.Name as Name1_, user_.Password as Password1_, user_.Roseid as Roseid1_ from ERP.dbo.Users user_ where user_.Id=? 
  2. Hibernate: select rose_.Id, rose_.Enabledel as Enabledel0_, rose_.Name as Name0_, rose_.Parent as Parent0_ from ERP.dbo.Rose rose_ where rose_.Id=? 
  3. Hibernate: delete from ERP.dbo.Users where Id=? 

可以正常删除!但是代码要这样写:

 
 
 
  1. User user =new User("adm"); 
  2.          user.setRose(new Rose("adm"));    //这句不加就不能删除,提示错误。除非数据库不加级联限制 
  3.         userDao.delete(user); 

当在user类中配置成cascade = { CascadeType.ALL } or cascade={} 时,无法删除。更新时也类似于这种情况,注意rose类中的addUser(User user)方法。再有fetch = FetchType.EAGER。在这里不是延时加载,如果设置成LAZY,在取得数据时怎么做好呢?看其他论坛的方法各有好处也有不好的地方,在找一个更方法。。。


本文名称:浅析Hibernate集合映射inverse和cascade
当前路径:http://bzwzjz.com/article/djcjghp.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站建设 重庆网站设计 企业网站设计 成都企业网站建设 商城网站建设 成都网站设计公司 高端定制网站设计 网站建设费用 重庆网站制作 四川成都网站制作 营销型网站建设 营销型网站建设 专业网站设计 成都商城网站制作 网站建设方案 成都网站建设 成都网站制作 外贸网站设计方案 成都网站建设公司 自适应网站设计 成都网站设计 宜宾网站设计