多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 千山萬水之Hibernate(四)――關聯映射(多對一)

千山萬水之Hibernate(四)――關聯映射(多對一)

來源:程序員人生   發布時間:2015-05-15 07:53:23 閱讀次數:3821次

在上1篇文章(《千山萬水之Hibernate(3)――基本映照 》)中,我們介紹了怎樣通過Hibernate進行最基本的單實體映照和Hibernate設計的1些基本原理,本篇文章將介紹關聯映照中的多對1映照是如何實現的。

原理分析

我們拿學生和班級為示例,學生屬于某1個班級,而且多個學生是有可能屬于同1個班級的,相應的實體關系圖為:
多對一關聯映射
Class的映照文件向上1篇我們介紹到的基本映照文件那樣編寫即可以,而對Student實體,我們需要從Student中得出對應班級,而Student與Class正是多對1的體現,因此需要在Student中加入many-to-one標簽,以表達出這類關聯關系:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping⑶.0.dtd"> <hibernate-mapping> <class name="com.tgb.hibernate.Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name" /> <many-to-one name="classes" column="classId"></many-to-one> </class> </hibernate-mapping>

操作示例

為了示例方便,首先我們編寫1個簡單的Hibernate操作工具類,封裝SessionFactory創建、Session的打開與關閉:

public class HibernateTool { private static SessionFactory factory; static{ try{ Configuration cfg = new Configuration().configure(); factory=cfg.buildSessionFactory(); }catch(Exception e){ e.printStackTrace(); } } public static Session getSession(){ return factory.openSession(); } public static void closeSession(Session session){ if(session != null){ if(session.isOpen()){ session.close(); } } } public static SessionFactory getSessionFactory(){ return factory; } }

1.調用session的Load方法,得出Student對象的級聯班級對象Classes(這也是Hibernate為我們提供的1大好處):

public void testLoad(){ Session session = null; try{ session = HibernateTool.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 2); System.out.println("student.name=" + student.getName()); System.out.println("student.class.name=" + user.getClasses().getName()); session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateTool.closeSession(session); } }

2.當保存數據時,我們已知道關聯有Transient對象的Persistent狀態的對象不能直接保存至數據庫,由于在清算緩存時,不能得到關聯對象的標識符,因此,我們有兩種解決方案,在將Student對象進行保存前,先將關聯的Classes對象保存,使其保持在Persistent狀態,則Student保存成功,另外1種便是設置級聯保存:
級聯配置
這樣在保存Student對象時,也會將級聯的班級對象進行保存:

public void testSave(){ Session session = null; try{ session = HibernateTool.getSession(); session.beginTransaction(); Class classes = new Class(); classes.setName("LFSFXY-TGB"); Student student = new Student(); student.setName("張3"); student.setClasses(classes); session.save(student); System.out.println("student.name=" + student.getName()); System.out.println("student.classes.name=" + student.getClasses().getName()); session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateTool.closeSession(session); } }

總結

通過上面的介紹相信你1定知道了Hibernate中的多對1究竟是怎樣1回事,通過示例我們也體會到了對象關聯給我們帶來的好處:級聯查詢出實體,舍棄了我們之前繁瑣的SQL語句操作。也通過級聯屬性cascade簡單了解了級聯保存的操作。
只有通過不斷的練習實踐、總結才能1步步到達熟練利用的程度,繼續加油!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中国做爰国产精品视频 | 精品久久成人免费第三区 | 毛片免费在线观看网址 | 一级毛片不卡 | 欧美另类小说乱小说 | 看黄免费网站 | 噜噜嘿在线视频免费观看 | 欧美一级人与动毛片免费播放 | 性欧美xxxx视频| 青草超级碰碰在线视频 | 亚欧美综合 | 视频一区二区三区在线 | 国产精品久久久久久久久 | 亚洲欧洲日韩国产 | 国产精品免费综合一区视频 | 亚洲精品欧美 | 国产亚洲美女精品久久久久 | 曰韩一级 | 亚洲 在线播放 | 亚洲一片 | 免费高清国产 | 亚洲区小说区图片区qvod | 一区二区福利视频 | 国产午夜不卡在线观看视频666 | 国产v欧美v日本v精品 | 大陆三级午夜理伦三级三 | 国产精品久久99 | h视频在线播放 | 国农村精品国产自线拍 | 欧美日韩一区二区三区免费不卡 | 亚洲视频福利 | 国产精品久久一区二区三区 | 日本三级s级在线播放 | 精品国产一区二区三区在线观看 | 网站免费视频 | 91精品国产色综合久久不 | 国产成人精品免费视频大全办公室 | 性欧美高清极品猛交 | 欧美最猛性xxxx免费 | xx小视频 | 一级一级女人真片 |