日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

在上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步步到達熟練利用的程度,繼續加油!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 免费的三级网站 | 自拍中文字幕 | 亚洲视频观看 | 欧美日韩精品一区 | 99久草 | 色婷婷综合久久久中字幕精品久久 | 男人操女人免费 | 91午夜在线 | 久久免费av| 欧美hdfree性xxxx | av噜噜噜 | 日韩精品免费在线观看 | 综合一区二区三区 | 久久久久久黄 | 九九精品视频在线观看 | 亚洲国产一区二区三区, | 日本久久免费 | 国产99久久久欧美黑人 | 久久久久久久女女女又又 | 91精品国产高清一区二区三区 | 欧美性受| 亚洲免费视频网站 | 天天摸天天操天天干 | 国产精品美女在线观看 | 91一区二区| 一区二区三区四区不卡 | 国产永久免费观看 | 高清国产一区 | 91看电影| 久久精品国产一区二区 | 国产性一级片 | 免费成人在线观看视频 | 欧美激情中文字幕 | 二区三区在线 | 91麻豆精品国产91久久久久久久久 | 日韩精品午夜 | 久久在线免费观看 | 日韩在线色 | 亚洲一区二区精品视频 | 成年人免费视频观看 | 又湿又紧又大又爽a视频国产 |