麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

精通Hibernate之映射繼承關(guān)系五

2019-11-18 12:57:06
字體:
供稿:網(wǎng)友

  本節(jié)的范例程序位于配套光盤的sourcecode/chapter14/14.2目錄下,運(yùn)行該程序前,需要在SAMPLEDB數(shù)據(jù)庫中手工創(chuàng)建COMPANIES表和EMPLOYEES表,然后加入測試數(shù)據(jù),相關(guān)的SQL腳本文件為/14.2/schema/sampledb.sql。
  
  在DOS命令行下進(jìn)入chapter14根目錄,然后輸入命令:
  
  ant -file build2.xml run
  
  就會運(yùn)行BusinessService類。BusinessService的main()方法調(diào)用test()方法,test()方法依次調(diào)用以下方法:
  
  findAllHourlyEmployees():檢索數(shù)據(jù)庫中所有的HourlyEmployee對象。
  findAllEmployees():檢索數(shù)據(jù)庫中所有的Employee對象。
  loadCompany():加載一個Company對象。
  saveEmployee():保存一個Employee對象。
  
  (1)運(yùn)行findAllHourlyEmployees()方法,它的代碼如下:
  
  tx = session.beginTransaction();
  List results=session.find("from HourlyEmployee");
  tx.commit();
  return results;
  在運(yùn)行Session的find()方法時,Hibernate執(zhí)行以下select語句:
  select * from EMPLOYEES where EMPLOYEE_TYPE='HE' ;
  select * from COMPANIES where ID=1;
  
  在加載HourlyEmployee對象時,還會同時加載與它關(guān)聯(lián)的Company對象。
  
  (2)運(yùn)行findAllEmployees()方法,它的代碼如下:
  
  tx = session.beginTransaction();
  List results=session.find("from Employee");
  tx.commit();
  return results;
  在運(yùn)行Session的find()方法時,Hibernate執(zhí)行以下select語句:
  select * from EMPLOYEES;
  select * from COMPANIES where ID=1;
  
  在這種映射方式下,Hibernate支持多態(tài)查詢,對于從EMPLOYEES表獲得的查詢結(jié)果,假如EMPLOYEE_TYPE字段取值為"HE",就創(chuàng)建HoulyEmployee實(shí)例,假如EMPLOYEE_TYPE字段取值為"SE",就創(chuàng)建SalariedEmployee實(shí)例,這些實(shí)例所關(guān)聯(lián)的Company對象也被加載。
  
  (3)運(yùn)行l(wèi)oadCompany()方法,它的代碼如下:
  
  tx = session.beginTransaction();
  Company company=(Company)session.load(Company.class,new Long(id));
  Hibernate.initialize(company.getEmployees());
  tx.commit();
  
  這種映射方式支持多態(tài)關(guān)聯(lián)。假如在Company.hbm.xml文件中對employees集合設(shè)置了立即檢索策略,那么Session的load()方法加載的Company對象的employees集合中包含所有關(guān)聯(lián)的Employee對象。由于本書提供的Company.hbm.xml文件對employees集合設(shè)置了延遲檢索策略,因此以上程序代碼還通過Hibernate類的靜態(tài)initialize()方法來顯式初始化employees集合。
  
  (4)運(yùn)行saveEmployee(Employee employee)方法,它的代碼如下:
  
  tx = session.beginTransaction();
  session.save(employee);
  tx.commit();
  
  在test()方法中,創(chuàng)建了一個HourlyEmployee實(shí)例,然后調(diào)用saveEmployee()方法保存這個實(shí)例:
  
  Employee employee=new HourlyEmployee("Mary",300,company);
  saveEmployee(employee);
  
  Session的save()方法能判定employee變量實(shí)際引用的實(shí)例的類型,假如employee變量引用HourlyEmployee實(shí)例,就執(zhí)行如下insert語句:
  
  insert into EMPLOYEES(ID,NAME,RATE,EMPLOYEE_TYPE,CUSTOMER_ID)
  values(5, 'Mary ',300, 'HE',1);
  
  以上insert語句沒有為SalariedEmployee類的salary屬性對應(yīng)的SALARY字段賦值,因此這條記錄的SALARY字段為null。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精品一区二区三区不卡牛牛 | 久久久久久久久久久久久久av | 精品久久久久久久久久久αⅴ | 亚洲国产精品二区 | 草b视频在线观看 | 一级做a爱片久久毛片a高清 | 国产精品久久久久久久久久 | 草草在线观看 | 精品无码久久久久久国产 | 亚洲资源在线 | 久久久久久久久久亚洲 | 成人午夜一区二区 | 国产精品久久久久久久久粉嫩 | 91午夜在线观看 | 小视频免费在线观看 | 久草在线手机视频 | 国产91九色| 午夜av男人的天堂 | 成人午夜天堂 | 91网站永久免费看 | 成人在线网站 | 激情综合婷婷久久 | 99精品视频在线看 | 国产成人在线免费看 | 91短视频网址 | 亚洲精品a在线观看 | 福利一区二区三区视频在线观看 | 国产精品久久久久久模特 | 亚洲免费在线看 | 免费色片 | 日韩视频1| a集毛片 | 免费一级欧美在线观看视频 | 免费看性xxx高清视频自由 | 国产91九色视频 | 久久久久久亚洲国产精品 | 国产成人精品自拍视频 | 黄色片免费在线播放 | 欧美韩国一区 | 中文字幕国产亚洲 | 看国产一级毛片 |