日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate的映射之二(一对多双向关联)

發(fā)布時間:2024/9/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate的映射之二(一对多双向关联) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

hibernate的一對多雙關(guān)聯(lián)

一對多關(guān)聯(lián)映射:在多的一端加入一個外鍵指向一的一端,它維護的關(guān)系是一指向多

?

hihernate一對多關(guān)聯(lián)映射(雙向Dept<----->Emp)

一對多雙向關(guān)聯(lián)映射:

* 在一一端的集合上使用<key>,在對方表中加入一個外鍵指向一一端
? ? ?? * 在多一端采用<many-to-one>
?
注意:<key>標簽指定的外鍵字段必須和<many-to-one>指定的外鍵字段一致,否則引用字段的錯誤
?

?

?

下面就以員工和部門為例:

這里的意思是既可以根據(jù)在查找部門時根據(jù)部門去找該部門下的所有員工,又能在檢索員工時獲取某個員工所屬的部門。

需要員工實體中植入部門實體。同時也需要在部門實體植入員工集合。

?

1.準備JavaBean

Dept實體類

public class Dept {
private Integer deptid;
private String deptname;
//植入員工集合
private Set<Emp> emps=new HashSet<Emp>();

public Integer getDeptid() {
return deptid;
}

public void setDeptid(Integer deptid) {
this.deptid = deptid;
}

public String getDeptname() {
return deptname;
}

public void setDeptname(String deptname) {
this.deptname = deptname;
}

public Set<Emp> getEmps() {
return emps;
}

public void setEmps(Set<Emp> emps) {
this.emps = emps;
}
}

Emp實體類
public class Emp {
private Integer empno;
private String ename;
//植入部門實體
private Dept dept=new Dept();

public Dept getDept() {
return dept;
}

public void setDept(Dept dept) {
this.dept = dept;
}

public Integer getEmpno() {
return empno;
}

public void setEmpno(Integer empno) {
this.empno = empno;
}

public String getEname() {
return ename;
}

public void setEname(String ename) {
this.ename = ename;
}
}

2.準備持久化類的映射文件

Dept.hbm.xml文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 映射文件開始 -->
<hibernate-mapping package="cn.day04mapping.onetomany.entity">
<!--表名稱-->
<class name="Dept" table="DEPT" schema="root">
<!--列名-->
<id name="deptid" column="DEPTID">
<!--主鍵生成的策略 native:自動生成主鍵字段-->
<generator class="native"></generator>
</id>
<property name="deptname" column="DEPTNAME"></property>
<!--植入set 標簽 -->
<set name="emps">
<!--多的一方表的外鍵列-->
<key column="deptno"></key>
<one-to-many class="Emp"></one-to-many>
</set>
</class>
</hibernate-mapping>

Emp.hbm.xml文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 映射文件開始 -->
<hibernate-mapping package="cn.day04mapping.onetomany.entity">
<!--表名稱-->
<class name="Emp" table="EMP" schema="root">
<!--列名-->
<id name="empno" column="EMPNO">
<!--主鍵生成的策略 native:自動生成主鍵字段-->
<generator class="native"></generator>
</id>
<property name="ename" column="ENAME"></property>
<!--一對多
員工是多的一方
name:Emp中植入一方的屬性名稱
column;數(shù)據(jù)庫中外鍵列的值
class:植入一方的屬性的類型
-->
<many-to-one name="dept" column="deptno" class="Dept"></many-to-one>
</class>
</hibernate-mapping>



3.準備hibernate.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 指定數(shù)據(jù)庫所用到的驅(qū)動 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 指定數(shù)據(jù)庫鏈接的url,hibernate鏈接的數(shù)據(jù)庫名 -->
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- 指定連接數(shù)據(jù)庫的用戶名 -->
<property name="connection.username">root</property>
<!-- 指定連接數(shù)據(jù)庫的用戶口令 -->
<property name="connection.password">root</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!--格式化sql -->
<property name="format_sql ">true</property>
<!-- 打印sql 控制臺-->
<property name="show_sql">true</property>
<!-- 指定數(shù)據(jù)庫方言 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 根據(jù)需要自動創(chuàng)建數(shù)據(jù)庫表 -->
<property name="hbm2ddl.auto">update</property>

<!--關(guān)聯(lián)小配置文件-->
<!--一對多-->
<mapping resource="cn/day04mapping/onetomany/entity/Dept.hbm.xml"></mapping>
<mapping resource="cn/day04mapping/onetomany/entity/Emp.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

4.書寫測試類

// 一對多雙向關(guān)聯(lián) hibernate工具類的運用
@Test
public void test03(){
Session session = HibernateUtil.getSession();
String hql="from Dept";
Query query = session.createQuery(hql);
List<Dept> list = query.list();
for (Dept item:list){
System.out.println(item.getDeptname());
System.out.println("==================");
for (cn.day04mapping.onetomany.entity.Emp emp:item.getEmps()){
System.out.println(emp.getEname());
}
}
System.out.println("===============================================根據(jù)員工編號查詢部門");
cn.day04mapping.onetomany.entity.Emp emp=session.load(cn.day04mapping.onetomany.entity.Emp.class,1);
System.out.println(emp.getDept().getDeptname());
}



hibernate工具類 public class HibernateUtil {
static Configuration cfg;
static SessionFactory factory;
static ThreadLocal<Session> td;
//靜態(tài)代碼塊
static {
cfg=new Configuration().configure();
factory=cfg.buildSessionFactory();
td=new ThreadLocal<Session>();
}
public static Session getSession(){
//看看有無線程變量
Session session = td.get();
if (session==null){
//線程中沒有session對象 創(chuàng)建一個
session = factory.openSession();
td.set(session);
}
//沒有和當前線程綁定
return session;
}

public static void closeSession(){
Session session = td.get();
td.set(null);
session.close();
}
}





?

? ?

?

轉(zhuǎn)載于:https://www.cnblogs.com/sujulin/p/8135709.html

總結(jié)

以上是生活随笔為你收集整理的hibernate的映射之二(一对多双向关联)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。