經(jīng)典hibernate教程,從入門到精通CSTP-Hibernate03(第三篇,共四篇)_第1頁
經(jīng)典hibernate教程,從入門到精通CSTP-Hibernate03(第三篇,共四篇)_第2頁
經(jīng)典hibernate教程,從入門到精通CSTP-Hibernate03(第三篇,共四篇)_第3頁
經(jīng)典hibernate教程,從入門到精通CSTP-Hibernate03(第三篇,共四篇)_第4頁
經(jīng)典hibernate教程,從入門到精通CSTP-Hibernate03(第三篇,共四篇)_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、單擊此處編輯母版標題樣式單擊此處編輯母版文本樣式第二級第三級第四級第五級*第六章Hibernate的關聯(lián)映射回憶下面這個異常是怎么回事?該怎么解決? at org.hibernate.impl.SessionFactoryImpl.getEntityPersister (SessionFactoryImpl.java:514) at org.hibernate.event.def.DefaultLoadEventListener.onLoad (DefaultLoadEventListener.java:66) at org.hibernate.impl.SessionImpl.fireLoa

2、d(SessionImpl.java:862) at org.hibernate.impl.SessionImpl.get(SessionImpl.java:799) at com.aptech.jb.dao.hibimpl.TblUserDAO.findById(TblUserDAO.java:52) at com.aptech.jb.Test.main(Test.java:13)沒有在加回憶 下面代碼有哪些錯誤?Transaction tx = null; Session session = HibernateSessionFactory.getSession(); try tx = se

3、ssion.beginTransaction();session.open();session.insert(item);session.close(); tx mit(); catch (Exception e) tx.rollback(); e.printStackTrace();沒有session.open()方法session.save(item);應該是session.save(item);應該先提交事務,再關閉session關閉session應在finally塊中進行預習檢查1、舉一個一對多關聯(lián)的例子2、舉一個多對一關聯(lián)的例子3、舉一個多對多關聯(lián)的例子4、使用Hibernate配置

4、關聯(lián)有什么好處?本章任務使用Hibernate實現(xiàn):配置Hibernate關聯(lián)自動加載區(qū)縣對應的街道配置Hibernate關聯(lián)并實現(xiàn):1、增加一個區(qū)縣:“山南區(qū)2、增加山南區(qū)下屬的三個街道3、刪除“五四大道4、劃“和平路到海淀區(qū)5、刪除山南區(qū)配置Hibernate多對多關聯(lián),實現(xiàn)某OA系統(tǒng)工程和人員對照關系的管理本章目標掌握單向many-to-one關聯(lián)掌握雙向one-to-many關聯(lián)掌握many-to-many關聯(lián)實體間的關聯(lián)單向多對一單向一對多tblJd.getQx().getQxname();TblJd jd = (TblJd)tblQx.getJds().get(0);jd.getJ

5、dname();tblQx.getJds.add(jd);實體間的關聯(lián)雙向一對多關系模型怎樣將實體一對多關系映射到數(shù)據(jù)庫?單向多對一關聯(lián)定義“區(qū)縣 、“街道實體如下: 映射文件:public class Jd private Integer jdid; private String jdname; private Qx qx; / Getters & Setters . public class Qx private Integer qxid; private String qxname; / Getters & Setters . 多對一關系 只在many一方配置了關聯(lián)單向多對一關聯(lián)建立測試

6、類,繼承自BaseHibernateDAOpublic class ManyToOneTest extends BaseHibernateDAO public static void main(String args) new ManyToOneTest().testManyToOne();public void testManyToOne() Jd jd = (Jd)super.get(Jd.class,1);String qxname = jd.getQx().getQxname();System.out.println(qxname + , + jd.getJdname();通過映射關系

7、的配置即獲得了在代碼中面向對象編程的便利性!通過配置many-to-one節(jié)點,加載街道多信息時,Hibernate自動加載了對應的區(qū)縣一信息小結在租房系統(tǒng)中,房屋信息Fwxx與用戶User間也是多對一關系。如何配置映射文件,使之可以通過下面的代碼輸出房屋信息和發(fā)布該信息的用戶名稱?Fwxx fwxx = (Fwxx)super.get(Fwxx.class,1);System.out.println( fwxx.getTitle() + , + fwxx.getUser.getUname();雙向一對多關聯(lián)現(xiàn)希望通過qx.getJds()即可獲得該區(qū)縣下所有街道的信息。如何配置映射信息? p

8、ublic class Qx private Integer qxid; private String qxname; private Set jds = new HashSet(); / Getters & Setters . 在Qx實體類中,增加jds屬性在Qx映射文件中增加set/one-to-many配置雙向一對多關聯(lián)測試程序Qx qx = (Qx)super.get(Qx.class,1);System.out.println(qx.getQxname();Iterator it = qx.getJds().iterator();while (it.hasNext() Jd jd =

9、 (Jd)it.next();System.out.print(jd.getJdname() + );現(xiàn)在我們在“區(qū)縣一和“街道多兩方面都添加了關聯(lián),獲得了雙向一對多的配置可以只在一的一方配置,從而得到單向一對多關聯(lián)雙向一對多關聯(lián)在配置好雙向一對多后,如何實現(xiàn)以下功能?1、增加一個區(qū)縣:“山南區(qū)2、增加山南區(qū)下屬的三個街道:“和平路、“八一路和“五四大道3、刪除“五四大道4、劃“和平路到海淀區(qū)5、刪除山南區(qū)在one一方添加數(shù)據(jù)增加一個區(qū)縣:山南區(qū)添加成功!在many一方添加數(shù)據(jù)增加山南區(qū)下屬的三個街道:“和平路、“八一路和“五四大道在many一方刪除數(shù)據(jù)1刪除“五四大道根本沒有執(zhí)行Delete

10、語句,數(shù)據(jù)沒有被刪除!從one一方去“刪除,Hibernate只是執(zhí)行了update語句。還是未刪除成功!問題出在配置文件上沒有配置set節(jié)點的inverse屬性inverse是“反轉的意思,表示關聯(lián)關系的控制權。為true,表示由對方負責關聯(lián)關系的添加和刪除;為false,表示由自己負責維護關聯(lián)關系。inverse設為true,由many一方刪除執(zhí)行了delete語句,刪除成功在many一方刪除數(shù)據(jù)2在many一方刪除數(shù)據(jù)的正確做法:給配置文件中set屬性增加inverse屬性,設為false 由many一方負責維護關聯(lián) 程序代碼:/ 在對象模型中刪除關系Jd jd = (Jd)super.

11、get(Jd.class,366);Qx qx = (Qx)super.get(Qx.class,19);qx.getJds().remove(jd);/ 在數(shù)據(jù)庫中刪除數(shù)據(jù)super.del(Jd.class,366);/BaseHibernateDAO中del方法代碼Transaction tx = null;try tx = session.beginTransaction(); session.delete(this.get(clazz,id); tx mit(); catch (RuntimeException re) tx.rollback(); throw re; 只執(zhí)行supe

12、r.del即可將數(shù)據(jù)從數(shù)據(jù)庫中刪除但為了保持對象模型和數(shù)據(jù)庫數(shù)據(jù)一致,還要調(diào)用qx.getJds().remove(jd);先從對象模型中刪除修改關聯(lián)關系劃“和平路到海淀區(qū)首先對對象模型編碼然后個更新hepinglu通過inverse屬性設定的控制方執(zhí)行了update語句在one一方刪除數(shù)據(jù)刪除山南區(qū)刪除山南區(qū)應級聯(lián)刪除下屬的區(qū)縣執(zhí)行了delete語句,但違反外鍵約束,刪除失敗super.del(365,Jd.class);super.del(19,Qx.class);?如果many一方數(shù)據(jù)過多,代碼繁瑣通過配置set節(jié)點cascade屬性可實現(xiàn)自動級聯(lián)刪除先刪除對應子表數(shù)據(jù),刪除成功!在on

13、e一方刪除數(shù)據(jù)set節(jié)點之cascade屬性all : 對所有操作都進行級聯(lián)none : 對所有操作都不進行級聯(lián)save-update : 執(zhí)行更新操作時級聯(lián)delete : 執(zhí)行刪除操作時級聯(lián)代碼自動執(zhí)行了級聯(lián)刪除小結在租房系統(tǒng)中,房屋信息Fwxx與用戶User是多對一關系;房屋信息Fwxx與街道Jd是多對一關系。請完成下面的方法,完成添加“房屋信息記錄到數(shù)據(jù)庫的功能。/* * 新建房屋信息記錄 * param title 房屋信息標題 * param fwxx 房屋信息內(nèi)容 * param userId 用戶ID * param jdId 街道ID */public void post(S

14、tring title,String fwxx,int userId,int jdId) /TODO:完成這個方法。many-to-many關聯(lián)HanniTod胖子王箏國家局供給鏈工程奴吉亞中國Go-Direct銷售系統(tǒng)無敵維護組某OA系統(tǒng)要解決如下業(yè)務問題:1、業(yè)務部門為工程式管理2、每個人參與一個或多個工程;每個項目由一個或多個人完成3、系統(tǒng)需要如下功能:a.列出工程的參加人員b.列出某個人參加的所有項目many-to-many關聯(lián)數(shù)據(jù)庫設計project和employee是多對多關系需要建立一個關系表many-to-many關聯(lián)多對多關系怎么映射呢? . 指定關聯(lián)表的名稱關聯(lián)表中外鍵的字段名使用many-to-many節(jié)點配置關聯(lián)表中對應外鍵的字段名根據(jù)業(yè)務規(guī)那么,設置其中一方inverse為true程序代碼many-to-many關聯(lián)編碼解決以下問題:1、新招聘了員工:三叔,參加到國家局供給鏈工程。2、新立項工程:中教集團網(wǎng)銀工程,三叔和胖子參加。3、無敵維護組工程結束,Tod和Hanni退出工程組。many-to-many關聯(lián)新招聘了員工:三叔,參加到國家局供給鏈工程。新立項項目:中教集團網(wǎng)銀項目,三叔和胖子參加。無敵維護組項目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論