亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

精通Hibernate之映射繼承關系三

2019-11-18 12:56:51
字體:
來源:轉載
供稿:網友

  <hibernate-mapping >
  <class name="mypack.SalariedEmployee" table="SALARIED_EMPLOYEES">
  <id name="id" type="long" column="ID">
  <generator class="increment"/>
  </id>
  
  <property name="name" type="string" column="NAME" />
  <property name="salary" column="SALARY" type="double" />
  
  <many-to-one
  name="company"
  column="COMPANY_ID"
  class="mypack.Company"
  />
  </class>
  </hibernate-mapping>
  
  由于Employee類沒有相應的映射文件,因此在初始化Hibernate時,只需向Configuration對象中加入Company類、HourlyEmployee類和SalariedEmployee類:
  
  Configuration config = new Configuration();
  config.addClass(Company.class)
  .addClass(HourlyEmployee.class)
  .addClass(SalariedEmployee.class);
  
  14.1.2 操縱持久化對象
  
  這種映射方式不支持多態查詢,在本書第11章的11.1.6節(多態查詢)介紹了多態查詢的概念。對于以下查詢語句:
  
  List employees=session.find("from Employee");
  
  假如Employee類是抽象類,那么Hibernate會拋出異常。假如Employee類是具體類,那么Hibernate僅僅查詢EMPLOYEES表,檢索出Employee類本身的實例,但不會檢索出它的兩個子類的實例。本節的范例程序位于配套光盤的sourcecode/chapter14/14.1目錄下,運行該程序前,需要在SAMPLEDB數據庫中手工創建COMPANIES表、HE表和SE表,然后加入測試數據,相關的SQL腳本文件為/14.1/schema/sampledb.sql。
  
  在chapter14目錄下有四個ANT的工程文件,分別為build1.xml、build2.xml、build3.xml和build4.xml,它們的區別在于文件開頭設置的路徑不一樣,例如在build1.xml文件中設置了以下路徑:
  
  <property name="source.root" value="14.1/src"/>
  <property name="class.root" value="14.1/classes"/>
  <property name="lib.dir" value="lib"/>
  <property name="schema.dir" value="14.1/schema"/>
  
  在DOS命令行下進入chapter14根目錄,然后輸入命令:
  
  ant -file build1.xml run
  
  就會運行BusinessService類。ANT命令的-file選項用于顯式指定工程文件。BusinessService類用于演示操縱Employee類的對象的方法,例程14-4是它的源程序。
  
  例程14-4 BusinessService.java
  
  public class BusinessService{
  public static SessionFactory sessionFactory;
  static{
  try{
  Configuration config = new Configuration();
  config.addClass(Company.class)
  .addClass(HourlyEmployee.class)
  .addClass(SalariedEmployee.class);
  sessionFactory = config.buildSessionFactory();
  }catch(Exception e){e.PRintStackTrace();}
  }
  
  public void saveEmployee(Employee employee) throws Exception{……}
  public List findAllEmployees() throws Exception{……}
  public Company loadCompany(long id) throws Exception{……}
  
  public void test() throws Exception{
  List employees=findAllEmployees();
  printAllEmployees(employees.iterator());
  
  Company company=loadCompany(1);
  printAllEmployees(company.getEmployees().iterator());
  
  Employee employee=new HourlyEmployee("Mary",300,company);
  saveEmployee(employee);
  
  }
  
  private void printAllEmployees(Iterator it){
  while(it.hasNext()){
  Employee e=(Employee)it.next();
  if(e instanceof HourlyEmployee){
  System.out.println(((HourlyEmployee)e).getRate());
  }else
  System.out.println(((SalariedEmployee)e).getSalary());
  }
  }
  public static void main(String args[]) throws Exception {
  new BusinessService().test();
  sessionFactory.close();
  }
  }
  BusinessService的main()方法調用test()方法,test()方法依次調用以下方法。
  findAllEmployees():檢索數據庫中所有的Employee對象。
  loadCompany():加載一個Company對象。
  saveEmployee():保存一個Employee對象。
  
 ?。?)運行findAllEmployees()方法,它的代碼如下:
  
  List results=new ArrayList();
  tx = session.beginTransaction();
  List hourlyEmployees=session.find("from HourlyEmployee");
  results.addAll(hourlyEmployees);
  
  List salariedEmployees=session.find("from SalariedEmployee");
  results.addAll(salariedEmployees);
  
  tx.commit();
  return results;
  
  為了檢索所有的Employee對象,必須分別檢索所有的HourlyEmployee實例和SalariedEmployee實例,然后把它們合并到同一個集合中。在運行Session的第一個find()方法時,Hibernate執行以下select語句:
  
  select * from HOURLY_EMPLOYEES;
  select * from COMPANIES where ID=1;
  
  從HourlyEmployee類到Company類不是多態關聯,在加載HourlyEmployee對象時,會同時加載與它關聯的Company對象。
  
  在運行Session的第二個find()方法時,Hibernate執行以下select語句:
  
  select * from SALARIED_EMPLOYEES;
  
  從SalariedEmployee類到Company類不是多態關聯,在加載SalariedEmployee對象時,會同時加載與它關聯的Company對象。在本書提供的測試數據中,所有HourlyEmployee實例和SalariedEmployee實例都與OID為1的Company對象關聯,由于該Company對象已經被加載到內存中,所以Hibernate不再需要執行檢索該對象的select語句。
  
 ?。?)運行loadCompany()方法,它的代碼如下:
  
  tx = session.beginTransaction();
  Company company=(Company)session.load(Company.class,new Long(id));
  
  List hourlyEmployees=session.find("from HourlyEmployee h where h.company.id="+id);
  company.getEmployees().addAll(hourlyEmployees);
  
  List salariedEmployees=session.find("from SalariedEmployee s where s.company.id="+id);
  company.getEmployees().addAll(salariedEmployees);
  
  tx.commit();
  return company;
  
  由于這種映射方式不支持多態關聯,因此由Session的load()方法加載的Company對象的employees集合中不包含任何Employee對象。BusinessService類必須負責從數據庫中檢索出所有與Company對象關聯的HourlyEmployee對象以及SalariedEmployee對象,然后把它們加入到employees集合中。
  
 ?。?)運行saveEmployee(Employee employee)方法,它的代碼如下:
  
  tx = session.beginTransaction();
  session.save(employee);
  tx.commit();
  
  在test()方法中,創建了一個HourlyEmployee實例,然后調用saveEmployee()方法保存這個實例:
  
  Employee employee=new HourlyEmployee("Mary",300,company);
  saveEmployee(employee);
  
  Session的save()方法能判定employee變量實際引用的實例的類型,假如employee變量引用HourlyEmployee實例,就向HE表插入一條記錄,執行如下insert語句:
  
  insert into HOURLY_EMPLOYEES(ID,NAME,RATE,CUSTOMER_ID)
  values(3, 'Mary',300,1);
  
  假如employee變量引用SalariedEmployee實例,就向SE表插入一條記錄。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩一区二区av| 欧美丰满少妇xxxx| 日韩av电影在线网| 亚洲国产另类久久精品| 国内精品伊人久久| 精品爽片免费看久久| 欧美成人国产va精品日本一级| 91在线观看免费观看| 国产精品视频免费观看www| 伊人成人开心激情综合网| 国产精品免费一区| 视频在线一区二区| 欧美一级在线亚洲天堂| 亚洲精品综合精品自拍| 亚洲va欧美va国产综合剧情| 久久精品国产欧美亚洲人人爽| 国产精品一区二区三区在线播放| 日本高清+成人网在线观看| 色综合久综合久久综合久鬼88| 日日骚av一区| 国产男人精品视频| 成人免费xxxxx在线观看| 精品福利视频导航| 欧美另类老肥妇| 亚洲成人xxx| 91精品国产99久久久久久| 国产剧情久久久久久| 91精品一区二区| 亚洲xxxx在线| 91九色国产社区在线观看| 国产噜噜噜噜噜久久久久久久久| 国产视频福利一区| 欧美另类老肥妇| 亚洲成人激情视频| 欧美大片在线免费观看| 国产精品一区二区三区免费视频| 夜夜嗨av色综合久久久综合网| 不卡伊人av在线播放| 蜜月aⅴ免费一区二区三区| 97香蕉久久夜色精品国产| 97视频在线观看免费| 日韩精品在线视频观看| 亚洲精品久久在线| 亚洲肉体裸体xxxx137| 欧美一区二粉嫩精品国产一线天| 一区二区三区在线播放欧美| 国产一区二区在线免费| 日本精品久久中文字幕佐佐木| 91精品在线观| 日韩av高清不卡| 亚洲精品福利视频| 深夜成人在线观看| 久久国产精品久久久久| 欧美孕妇孕交黑巨大网站| 欧美专区在线播放| 日韩电影在线观看中文字幕| 欧美在线视频免费| 国产丝袜一区二区三区免费视频| 久久综合国产精品台湾中文娱乐网| 欧美黄色片视频| 国产美女精品免费电影| 97在线观看视频| 91产国在线观看动作片喷水| 日韩免费高清在线观看| www.亚洲免费视频| 欧美专区在线观看| 亚洲男女自偷自拍图片另类| 国产精品永久免费观看| 亚洲午夜精品久久久久久性色| 91久久久久久久一区二区| 国产精品色婷婷视频| 97热在线精品视频在线观看| 亚洲欧美激情在线视频| 91色精品视频在线| 中国人与牲禽动交精品| 色综合男人天堂| 欧美尤物巨大精品爽| 日韩av在线一区二区| 欧美日韩美女视频| 97碰碰碰免费色视频| 国产日韩换脸av一区在线观看| 国产精品黄页免费高清在线观看| 久久男人资源视频| 亚洲精品女av网站| 一区二区三区在线播放欧美| 欧美视频二区36p| 日韩有码在线播放| 亚洲欧美国产精品va在线观看| 成人免费看吃奶视频网站| 久久乐国产精品| 亚洲人成啪啪网站| 成人h视频在线观看播放| 国产一区二区三区在线观看网站| 日韩亚洲欧美中文高清在线| 2021久久精品国产99国产精品| 亚洲人成在线一二| 欧美理论电影网| 亚洲丝袜在线视频| 日韩精品久久久久久福利| 欧美日韩福利电影| 精品免费在线观看| 欧美成人免费全部观看天天性色| 久久免费精品日本久久中文字幕| 日韩国产一区三区| 国产精品视频永久免费播放| 欧美在线视频在线播放完整版免费观看| 亚洲成人激情在线| 九九热这里只有在线精品视| 91欧美精品成人综合在线观看| 欧美日韩午夜剧场| 欧美精品videosex极品1| 亚洲美女精品久久| 欧美黑人一级爽快片淫片高清| 国内揄拍国内精品少妇国语| 欧美另类暴力丝袜| 亚洲福利视频久久| 91精品国产91久久久| 26uuu国产精品视频| 中文在线不卡视频| 日本免费在线精品| 正在播放国产一区| 亚洲欧美精品一区二区| 亚洲精品按摩视频| 日韩精品极品在线观看播放免费视频| 久久亚洲一区二区三区四区五区高| 国产精品99久久久久久www| 亚洲国产日韩一区| 亚洲精品www久久久久久广东| 精品中文字幕在线观看| 91精品啪在线观看麻豆免费| 亚洲综合最新在线| 欧美性高潮床叫视频| 久久精品视频网站| 久久久精品免费视频| 亚洲xxxxx电影| 亚洲淫片在线视频| 欧美大奶子在线| 久久久www成人免费精品| 亚洲一区免费网站| 日韩视频免费看| 亚洲最新视频在线| 麻豆国产精品va在线观看不卡| 欧美午夜影院在线视频| 欧美成年人网站| 国产精品96久久久久久又黄又硬| 国产精品吊钟奶在线| 97在线视频免费观看| 欧美性生交xxxxx久久久| 91精品久久久久久久久| 欧美激情国产高清| 97精品国产97久久久久久| 欧美亚洲激情视频| 91国产视频在线播放| 永久555www成人免费| 国产精品视频久久久久| 亚洲理论在线a中文字幕| 国产一区二区三区视频在线观看| 亚洲欧美精品在线| 亚洲天堂男人天堂女人天堂| 在线观看成人黄色| 久久亚洲国产精品成人av秋霞| 97超级碰在线看视频免费在线看| 不卡av在线播放| 亚洲桃花岛网站|