欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解hibernate雙向多對(duì)多關(guān)聯(lián)映射XML與注解版

 更新時(shí)間:2017年05月08日 17:19:26   作者:lfendo  
本篇文章主要介紹了詳解hibernate雙向多對(duì)多關(guān)聯(lián)映射XML與注解版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

雙向多對(duì)多關(guān)聯(lián)映射原理:

假設(shè),一個(gè)員工可能有多個(gè)角色,一個(gè)角色可能有多個(gè)員工,從員工或角色的角度看,這就是多對(duì)多的關(guān)系,不管從哪一個(gè)角度看,都是多對(duì)多的聯(lián)系。多對(duì)多關(guān)聯(lián)映射關(guān)系一般采用中間表的形式來(lái)實(shí)現(xiàn),即新增一種包含關(guān)聯(lián)雙方主鍵的表。實(shí)現(xiàn)多對(duì)多關(guān)聯(lián)關(guān)系,在數(shù)據(jù)庫(kù)底層通過(guò)添加中間表指定關(guān)聯(lián)關(guān)系,而在hibernate框架在雙方的實(shí)體中添加一個(gè)保存對(duì)方的集合,在雙方的映射文件中使用<set>元素和<many-to-many>元素進(jìn)行關(guān)聯(lián)關(guān)系的配置。

如下圖所示:

(1)XML版

Role類(lèi):

package Hibernate_demo1.Demo15.Entity; 
 
import java.util.Set; 
 
public class Role { 
   
  private String id; 
  private String rame; 
  private Set<User> users; 
   
   
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getRame() { 
    return rame; 
  } 
  public void setRame(String rame) { 
    this.rame = rame; 
  } 
  public Set<User> getUsers() { 
    return users; 
  } 
  public void setUsers(Set<User> users) { 
    this.users = users; 
  } 
} 

User類(lèi):

package Hibernate_demo1.Demo15.Entity; 
 
import java.util.Set; 
 
public class User { 
 
  private String id; 
  private String uname; 
  private Set<Role> roles; 
 
   
 
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getUname() { 
    return uname; 
  } 
  public void setUname(String uname) { 
    this.uname = uname; 
  } 
  public Set<Role> getRoles() { 
    return roles; 
  } 
  public void setRoles(Set<Role> roles) { 
    this.roles = roles; 
  } 
   
   
} 

Role.hbm.xml映射類(lèi):

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping>  
  <class name="Hibernate_demo1.Demo15.Entity.Role" table="role">  
    <id name="id" type="java.lang.String">  
      <column name="id"/> 
      <generator class="uuid">  
      </generator>  
    </id>  
    <property name="rame" column="rname"/> 
     
    <set name="users" table="user_role">  
      <key column="roleid"></key>  
      <many-to-many class="Hibernate_demo1.Demo15.Entity.User" column="userid"></many-to-many>  
    </set>  
  </class>  
</hibernate-mapping>  

User.hbm.xml映射類(lèi):

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping>  
  <class name="Hibernate_demo1.Demo15.Entity.User" table="user">  
    <id name="id">  
      <generator class="uuid">  
      </generator>  
    </id>  
     
    <property name="uname" column="uname"/>  
      
     <set name="roles" table="user_role"> 
      <key column="userid"/> 
      <many-to-many class="Hibernate_demo1.Demo15.Entity.Role" column="roleid" />   
    </set> 
  </class>  
</hibernate-mapping>  

測(cè)試類(lèi):

package Hibernate_demo1.Demo15; 
 
import java.util.HashSet; 
import java.util.Set; 
 
import org.hibernate.Session; 
 
import Hibernate_demo1.Demo15.Entity.Role; 
import Hibernate_demo1.Demo15.Entity.User; 
import Hibernate_demo1.Demo15.Util.HibernateUtils; 
 
 
 
public class App  
{ 
  public static void main( String[] args ) 
  { 
     
    Session session = null; 
    try{  
        
      session = HibernateUtils.getSession(); 
      session.beginTransaction();  
       
 
      Role r1 = new Role(); 
      r1.setRame("數(shù)據(jù)錄入人員"); 
      session.save(r1); 
       
      Role r2 = new Role(); 
      r2.setRame("商務(wù)主管"); 
      session.save(r2); 
       
      Role r3 = new Role(); 
      r3.setRame("商務(wù)經(jīng)理"); 
      session.save(r3); 
       
      Role r4 = new Role(); 
      r4.setRame("項(xiàng)目會(huì)計(jì)"); 
      session.save(r4); 
       
      User u1 = new User(); 
      u1.setUname("張三"); 
      Set<Role> u1Roles = new HashSet<Role>(); 
      u1Roles.add(r1); 
      u1Roles.add(r2); 
      u1.setRoles(u1Roles); 
      session.save(u1); 
       
      User u2 = new User(); 
      u2.setUname("李四"); 
      Set<Role> u2Roles = new HashSet<Role>(); 
      u2Roles.add(r1); 
      u2Roles.add(r2); 
      u2Roles.add(r3); 
      u2.setRoles(u2Roles); 
      session.save(u2); 
       
      User u3 = new User(); 
      u3.setUname("王五"); 
      Set<Role> u3Roles = new HashSet<Role>(); 
      u3Roles.add(r3); 
      u3Roles.add(r4); 
      u3.setRoles(u3Roles); 
      session.save(u3); 
       
       
      session.getTransaction().commit();  
    }catch(Exception e){  
      e.printStackTrace();  
      session.getTransaction().rollback();  
    }finally{  
      HibernateUtils.closeSession(session);  
    } 
  } 
} 

執(zhí)行結(jié)果:

Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 

數(shù)據(jù)庫(kù)內(nèi)容為:

user表:


role表:


user_role表:

(2)注解版

Role類(lèi):

package Hibernate_demo1.Demo16.Entity; 
 
import java.util.HashSet; 
import java.util.Set; 
 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.ManyToMany; 
import javax.persistence.Table; 
 
import org.hibernate.annotations.GenericGenerator; 
 
@Entity 
@Table(name="role") 
public class Role { 
   
  @Id 
    @GenericGenerator(name="uuidGenerator", strategy="uuid") 
    @GeneratedValue(generator="uuidGenerator") 
  private String id; 
   
  @Column(name="rname") 
  private String rame; 
   
  @ManyToMany(cascade=CascadeType.REFRESH,mappedBy="roles") 
  private Set<User> users=new HashSet<User>(); 
   
   
   
   
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getRame() { 
    return rame; 
  } 
  public void setRame(String rame) { 
    this.rame = rame; 
  } 
  public Set<User> getUsers() { 
    return users; 
  } 
  public void setUsers(Set<User> users) { 
    this.users = users; 
  } 
} 

User類(lèi):

package Hibernate_demo1.Demo16.Entity; 
 
import java.util.HashSet; 
import java.util.Set; 
 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.JoinTable; 
import javax.persistence.ManyToMany; 
import javax.persistence.Table; 
import javax.persistence.JoinColumn; 
 
import org.hibernate.annotations.GenericGenerator; 
 
@Entity 
@Table(name="user") 
public class User { 
 
  @Id 
    @GenericGenerator(name="uuidGenerator", strategy="uuid") 
    @GeneratedValue(generator="uuidGenerator") 
  private String id; 
   
  @Column(name="uname") 
  private String uname; 
   
  /* 
   * @ManyToMany表示多對(duì)多關(guān)聯(lián),對(duì)于這種關(guān)聯(lián)極少數(shù)情況會(huì)使用級(jí)聯(lián)刪除,我這里設(shè)置的是級(jí)聯(lián)刷新; 
   * 因?yàn)橛兄虚g表的存在這里使用@JoinTable來(lái)設(shè)置關(guān)聯(lián)表后面的name配置的是關(guān)聯(lián)表的名稱(chēng) 
   * inverseJoinColumn配置的是關(guān)系被維護(hù)一方主鍵對(duì)應(yīng)的中間表字段 
   * joinColumn配置的是關(guān)系維護(hù)方主鍵對(duì)應(yīng)的中間表字段。 
   */ 
  @ManyToMany(cascade=CascadeType.REFRESH) 
  @JoinTable(name="user_role",inverseJoinColumns=@JoinColumn(name="roleid"),joinColumns=@JoinColumn(name="userid")) 
  private Set<Role> roles=new HashSet<Role>(); 
 
   
 
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getUname() { 
    return uname; 
  } 
  public void setUname(String uname) { 
    this.uname = uname; 
  } 
  public Set<Role> getRoles() { 
    return roles; 
  } 
  public void setRoles(Set<Role> roles) { 
    this.roles = roles; 
  } 
   
   
} 

測(cè)試類(lèi):

package Hibernate_demo1.Demo16; 
 
import java.util.HashSet; 
import java.util.Set; 
 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
 
import Hibernate_demo1.Demo16.Entity.Role; 
import Hibernate_demo1.Demo16.Entity.User; 
 
 
public class Test { 
 
  public static void main(String[] args) { 
     
 
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();  
    Session session = sessionFactory.getCurrentSession();  
    Transaction tx = session.beginTransaction();  
     
   
    //創(chuàng)建兩個(gè)用戶(hù) 
    User us1=new User(); 
    us1.setUname("小明"); 
     
    User us2=new User(); 
    us2.setUname("小黑"); 
     
    //創(chuàng)建用戶(hù)集合 
    Set<User> su=new HashSet<User>(); 
    su.add(us1); 
    su.add(us2); 
     
     
    //創(chuàng)建兩個(gè)角色 
    Role ro1=new Role(); 
    ro1.setRame("程序員"); 
    ro1.setUsers(su); 
     
    Role ro2=new Role(); 
    ro2.setRame("技術(shù)經(jīng)理"); 
    ro2.setUsers(su); 
     
     
    //創(chuàng)建角色集合 
    Set<Role> sr=new HashSet<Role>(); 
    sr.add(ro1); 
    sr.add(ro2); 
     
    //往用戶(hù)添加角色集合 
    us1.setRoles(sr); 
    us2.setRoles(sr); 
     
    //保存用戶(hù)和角色 
    session.save(us1); 
    session.save(us2); 
    session.save(ro1); 
    session.save(ro2); 
     
     
    tx.commit(); 
    session.close(); 
  } 
 
} 

執(zhí)行結(jié)果如下:

Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring啟動(dòng)錯(cuò)誤Singleton bean creation not allowed while the singletons of this factory are indestruction

    spring啟動(dòng)錯(cuò)誤Singleton bean creation not al

    本文主要介紹了spring啟動(dòng)錯(cuò)誤Singleton bean creation not allowed while the singletons of this factory are indestruction,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 老生常談spring的事務(wù)傳播機(jī)制

    老生常談spring的事務(wù)傳播機(jī)制

    這篇文章主要介紹了spring的事務(wù)傳播機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java中Calendar類(lèi)用法實(shí)例詳解

    java中Calendar類(lèi)用法實(shí)例詳解

    這篇文章主要介紹了java中Calendar類(lèi)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Calendar類(lèi)的函數(shù)、方法功能與相關(guān)使用技巧,需要的朋友可以參考下
    2017-10-10
  • MyBatis Plus復(fù)合主鍵問(wèn)題的解決

    MyBatis Plus復(fù)合主鍵問(wèn)題的解決

    在數(shù)據(jù)庫(kù)設(shè)計(jì)中,有時(shí)候需要使用復(fù)合主鍵來(lái)唯一標(biāo)識(shí)表中的一行數(shù)據(jù),本文將為您詳細(xì)介紹MyBatis Plus中復(fù)合主鍵的問(wèn)題以及解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • ScheduledThreadPoolExecutor巨坑解決

    ScheduledThreadPoolExecutor巨坑解決

    這篇文章主要為大家介紹了使用ScheduledThreadPoolExecutor遇到的巨坑解決示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • SpringSecurity退出功能實(shí)現(xiàn)的正確方式(推薦)

    SpringSecurity退出功能實(shí)現(xiàn)的正確方式(推薦)

    本文將介紹在Spring Security框架下如何實(shí)現(xiàn)用戶(hù)的"退出"logout的功能。本文通過(guò)實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-11-11
  • Java中URL的處理方法詳解

    Java中URL的處理方法詳解

    URL(Uniform?Resource?Locator)中文名為統(tǒng)一資源定位符,有時(shí)也被俗稱(chēng)為網(wǎng)頁(yè)地址,表示為互聯(lián)網(wǎng)上的資源,本文主要為大家介紹了Java是如何處理URL的,感興趣的可以了解一下
    2023-05-05
  • Java9以后的垃圾回收的具體用法

    Java9以后的垃圾回收的具體用法

    這篇文章主要介紹了Java9以后的垃圾回收的具體用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java關(guān)鍵字final、static使用總結(jié)

    Java關(guān)鍵字final、static使用總結(jié)

    final方法不能被子類(lèi)的方法覆蓋,但可以被繼承。用static修飾的代碼塊表示靜態(tài)代碼塊,當(dāng)Java虛擬機(jī)(JVM)加載類(lèi)時(shí),就會(huì)執(zhí)行該代碼塊,下面通過(guò)本文給大家分享Java關(guān)鍵字final、static使用總結(jié),感興趣的朋友一起看看吧
    2017-07-07
  • Java使用Ajax異步上傳文件

    Java使用Ajax異步上傳文件

    使用Ajax上傳文件的應(yīng)用場(chǎng)景頗多,比如上傳用戶(hù)頭像、博客文章中插入圖片、對(duì)認(rèn)證用戶(hù)相關(guān)身份進(jìn)行校驗(yàn)等等很多很多。本文提供一個(gè)簡(jiǎn)單的示例供大家參考
    2021-05-05

最新評(píng)論