Hibernate教程從入門到精通第三篇共四篇_第1頁
Hibernate教程從入門到精通第三篇共四篇_第2頁
Hibernate教程從入門到精通第三篇共四篇_第3頁
Hibernate教程從入門到精通第三篇共四篇_第4頁
Hibernate教程從入門到精通第三篇共四篇_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章Hibernate的關(guān)聯(lián)映射1回顧下面這個異常是怎么回事?該怎么解決?org.hibernate.MappingException: Unknown entity: com.aptech.jb.entity.TblUser at org.hibernate.impl.SessionFactoryImpl.getEntityPersister (SessionFactoryImpl.java:514) at org.hibernate.event.def.DefaultLoadEventListener.onLoad (DefaultLoadEventListener.java:66) a

2、t org.hibernate.impl.SessionImpl.fireLoad(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)沒有在Hibernate.cfg.xml加2回顧 下面代碼有哪些錯誤?Transaction tx = null; Session s

3、ession = HibernateSessionFactory.getSession(); try tx = session.beginTransaction();session.open();session.insert(item);session.close(); mit(); catch (Exception e) tx.rollback(); e.printStackTrace();沒有session.open()方法session.save(item);應(yīng)該是session.save(item);應(yīng)該先提交事務(wù),再關(guān)閉session關(guān)閉session應(yīng)在finally塊中進(jìn)行3預(yù)習(xí)

4、檢查1、舉一個一對多關(guān)聯(lián)的例子2、舉一個多對一關(guān)聯(lián)的例子3、舉一個多對多關(guān)聯(lián)的例子4、使用Hibernate配置關(guān)聯(lián)有什么好處?4本章任務(wù)使用Hibernate實現(xiàn):配置Hibernate關(guān)聯(lián)自動加載區(qū)縣對應(yīng)的街道配置Hibernate關(guān)聯(lián)并實現(xiàn):1、增加一個區(qū)縣:“山南區(qū)”2、增加山南區(qū)下屬的三個街道3、刪除“五四大道”4、劃“和平路”到海淀區(qū)5、刪除山南區(qū)配置Hibernate多對多關(guān)聯(lián),實現(xiàn)某OA系統(tǒng)項目和人員對照關(guān)系的管理5本章目標(biāo)掌握單向many-to-one關(guān)聯(lián)掌握雙向one-to-many關(guān)聯(lián)掌握many-to-many關(guān)聯(lián)6實體間的關(guān)聯(lián)單向多對一單向一對多tblJd.getQx

5、().getQxname();TblJd jd = (TblJd)tblQx.getJds().get(0);jd.getJdname();tblQx.getJds.add(jd);7實體間的關(guān)聯(lián)雙向一對多關(guān)系模型怎樣將實體一對多關(guān)系映射到數(shù)據(jù)庫?8單向多對一關(guān)聯(lián)定義“區(qū)縣” 、“街道”實體如下: 映射文件:public class Jd private Integer jdid; private String jdname; private Qx qx; / Getters & Setters . public class Qx private Integer qxid; private S

6、tring qxname; / Getters & Setters . 多對一關(guān)系 只在many一方配置了關(guān)聯(lián)9單向多對一關(guān)聯(lián)建立測試類,繼承自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(

7、).getQxname();System.out.println(qxname + , + jd.getJdname();通過映射關(guān)系的配置即獲得了在代碼中面向?qū)ο缶幊痰谋憷?!通過配置many-to-one節(jié)點,加載街道(多)信息時,Hibernate自動加載了對應(yīng)的區(qū)縣(一)信息10小結(jié)在租房系統(tǒng)中,房屋信息(Fwxx)與用戶(User)間也是多對一關(guān)系。如何配置映射文件,使之可以通過下面的代碼輸出房屋信息和發(fā)布該信息的用戶名稱?Fwxx fwxx = (Fwxx)super.get(Fwxx.class,1);System.out.println( fwxx.getTitle() + ,

8、 + fwxx.getUser.getUname();11雙向一對多關(guān)聯(lián)現(xiàn)希望通過qx.getJds()即可獲得該區(qū)縣下所有街道的信息。如何配置映射信息? public class Qx private Integer qxid; private String qxname; private Set jds = new HashSet(); / Getters & Setters . 在Qx實體類中,增加jds屬性在Qx映射文件中增加set/one-to-many配置12雙向一對多關(guān)聯(lián)測試程序Qx qx = (Qx)super.get(Qx.class,1);System.out.printl

9、n(qx.getQxname();Iterator it = qx.getJds().iterator();while (it.hasNext() Jd jd = (Jd)it.next();System.out.print(jd.getJdname() + );現(xiàn)在我們在“區(qū)縣”(一)和“街道”(多)兩方面都添加了關(guān)聯(lián),獲得了雙向一對多的配置可以只在一的一方配置,從而得到單向一對多關(guān)聯(lián)13雙向一對多關(guān)聯(lián)在配置好雙向一對多后,如何實現(xiàn)下列功能?1、增加一個區(qū)縣:“山南區(qū)”2、增加山南區(qū)下屬的三個街道:“和平路”、“八一路”和“五四大道”3、刪除“五四大道”4、劃“和平路”到海淀區(qū)5、刪除山南區(qū)

10、14在one一方添加數(shù)據(jù)增加一個區(qū)縣:山南區(qū)添加成功!15在many一方添加數(shù)據(jù)增加山南區(qū)下屬的三個街道:“和平路”、“八一路”和“五四大道”16在many一方刪除數(shù)據(jù)1刪除“五四大道”根本沒有執(zhí)行Delete語句,數(shù)據(jù)沒有被刪除!從one一方去“刪除”,Hibernate只是執(zhí)行了update語句。還是未刪除成功!問題出在配置文件上沒有配置set節(jié)點的inverse屬性inverse是“反轉(zhuǎn)”的意思,表示關(guān)聯(lián)關(guān)系的控制權(quán)。為true,表示由對方負(fù)責(zé)關(guān)聯(lián)關(guān)系的添加和刪除;為false,表示由自己負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系。inverse設(shè)為true,由many一方刪除執(zhí)行了delete語句,刪除成功17

11、在many一方刪除數(shù)據(jù)2在many一方刪除數(shù)據(jù)的正確做法:給配置文件中set屬性增加inverse屬性,設(shè)為false (由many一方負(fù)責(zé)維護(hù)關(guān)聯(lián)) 程序代碼:/ 在對象模型中刪除關(guān)系Jd jd = (Jd)super.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.beginTransacti

12、on(); session.delete(this.get(clazz,id); mit(); catch (RuntimeException re) tx.rollback(); throw re; 只執(zhí)行super.del即可將數(shù)據(jù)從數(shù)據(jù)庫中刪除但為了保持對象模型和數(shù)據(jù)庫數(shù)據(jù)一致,還要調(diào)用qx.getJds().remove(jd);先從對象模型中刪除18修改關(guān)聯(lián)關(guān)系劃“和平路”到海淀區(qū)首先對對象模型編碼然后個更新hepinglu(通過inverse屬性設(shè)定的控制方)執(zhí)行了update語句19在one一方刪除數(shù)據(jù)刪除山南區(qū)刪除山南區(qū)應(yīng)級聯(lián)刪除下屬的區(qū)縣執(zhí)行了delete語句,但違反外鍵約束

13、,刪除失敗super.del(365,Jd.class);super.del(19,Qx.class);?如果many一方數(shù)據(jù)過多,代碼繁瑣通過配置set節(jié)點cascade屬性可實現(xiàn)自動級聯(lián)刪除先刪除對應(yīng)子表數(shù)據(jù),刪除成功!20在one一方刪除數(shù)據(jù)set節(jié)點之cascade屬性all : 對所有操作都進(jìn)行級聯(lián)none : 對所有操作都不進(jìn)行級聯(lián)save-update : 執(zhí)行更新操作時級聯(lián)delete : 執(zhí)行刪除操作時級聯(lián)代碼自動執(zhí)行了級聯(lián)刪除21小結(jié)在租房系統(tǒng)中,房屋信息(Fwxx)與用戶(User)是多對一關(guān)系;房屋信息(Fwxx)與街道(Jd)是多對一關(guān)系。請完成下面的方法,完成添加“

14、房屋信息”記錄到數(shù)據(jù)庫的功能。/* * 新建房屋信息記錄 * param title 房屋信息標(biāo)題 * param fwxx 房屋信息內(nèi)容 * param userId 用戶ID * param jdId 街道ID */public void post(String title,String fwxx,int userId,int jdId) /TODO:完成這個方法。22many-to-many關(guān)聯(lián)HanniTod胖子王箏國家局供應(yīng)鏈項目奴吉亞(中國)Go-Direct銷售系統(tǒng)無敵維護(hù)組某OA系統(tǒng)要解決如下業(yè)務(wù)問題:1、業(yè)務(wù)部門為項目式管理2、每個人參與一個或多個項目;每個項目由一個或多個人

15、完成3、系統(tǒng)需要如下功能:a.列出項目的參加人員b.列出某個人參加的所有項目23many-to-many關(guān)聯(lián)數(shù)據(jù)庫設(shè)計project和employee是多對多關(guān)系需要建立一個關(guān)系表24many-to-many關(guān)聯(lián)多對多關(guān)系怎么映射呢? . 指定關(guān)聯(lián)表的名稱關(guān)聯(lián)表中外鍵的字段名使用many-to-many節(jié)點配置關(guān)聯(lián)表中對應(yīng)外鍵的字段名根據(jù)業(yè)務(wù)規(guī)則,設(shè)置其中一方inverse為true25程序代碼26many-to-many關(guān)聯(lián)編碼解決下列問題:1、新招聘了員工:三叔,加入到國家局供應(yīng)鏈項目。2、新立項項目:中教集團(tuán)網(wǎng)銀項目,三叔和胖子參加。3、無敵維護(hù)組項目結(jié)束,Tod和Hanni退出項目組。27many-to-many關(guān)聯(lián)新招聘了員工:三叔,加入到國家局供應(yīng)鏈項目。新立項項目:中教集團(tuán)網(wǎng)銀項目,三叔和胖子參加。無敵維護(hù)組項

溫馨提示

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

評論

0/150

提交評論