溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
           

          Hibernate級聯查詢(HQL)

          拿雇員(Employee)與部門(Department)來舉例子說明

          1.1    數據庫模型

          1.1.1          Employee

          DROP TABLE IF EXISTS employee;

          CREATE TABLE employee (

           id int(11) NOT NULL auto_increment,

           empname varchar(255) default NULL,

           empage int(11) default NULL,

           context varchar(255) default NULL,

           deptid int(11) default NULL,

           PRIMARY KEY (id),

           KEY FK4722E6AEAD9148B6 (deptid)

          ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

          1.1.2          Department

          DROP TABLE IF EXISTS department;

          CREATE TABLE department (

           id int(11) NOT NULL auto_increment,

           deptname varchar(255) default NULL,

           PRIMARY KEY (id)

          ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

          1.2    Java

          publicclass Employee

          {

              private Integer id;

              private String empname;

              private Integer empage;

              private String context;

              private Integer deptid;

              private Department department=new Department();

                //此處省略set()get()方法

          }

          publicclass Department

          {

              private Integer id;

              private String deptname;

              private Set<Employee> employeeSet=new HashSet<Employee>();

          //此處省略set()get()方法

          }

          1.3    映射文件

          <hibernate-mapping package="com.dl.bean">

              <class name="Employee" table="employee">

                   <id name="id" >

                       <generator class="native"/>

                   </id>

                   <property name="empname"/>

                   <property name="empage"/>

                   <property name="context" />

                   <property name="deptid" insert="false" update="false"/>

                   <many-to-one name="department" column="deptid" cascade="all" class="Department" />

              </class>

              </hibernate-mapping>

          <hibernate-mapping package="com.dl.bean">

              <class name="Department" table="department">

                   <id name="id" >

                       <generator class="native"/>

                   </id>

                   <property name="deptname" />

                       <set name="employeeSet">

                           <key column="deptid"></key>

                           <one-to-many class="Employee"/>

                       </set>

              </class>

              </hibernate-mapping>

          1.4    在寫Hibernate級聯查詢的HQL語句時,與傳統的JDBC方式有著本質的區別

          1.4.1          JDBC級聯寫法

          SELECT * FROM employee INNER JOIN department ON employee.deptid= department.id

          1.4.2          HQL級聯寫法

          select

          employee.id,

          employee.empname,

          employee.empage,

          employee.context,

          employee.department.deptname

          from

          Employee employee

          inner join employee.department (此處與前文中Employee類中的屬性名一致)

          order by employee.id desc

          注意紅色字體部分,在傳統的SQL語句中inner join后面跟級聯的表,但在HQLinner join后面跟能反映出級聯關系的字段屬性(pojo中的名字必須高度保持一致),當存在級聯時,Hibernate查詢結果為一對象數組,其數組的長度取決于selectfrom之間字段的個數。

          1.5    注意分析下面三條語句看有什么不同

          SQLQuery方式

          sqlquery=session.createSQLQuery("select employee.id,employee.empname,employee.empage,employee.context,department.deptname from employee inner join department on employee.deptid=department.id");

          Query方式:

          session.createQuery("select employee.id,employee.empname,employee.empage,employee.context,employee.department.deptname from Employee employee inner join employee.department order by employee.id desc");

          Query方式:

          Query query=session.createQuery("select employee.empname, employee.department from Employee as employee order by employee.id desc");


          電子文檔下載
          posted on 2009-11-25 16:24 雪山飛鵠 閱讀(5199) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 略阳县| 泰州市| 安吉县| 凤山市| 河间市| 乐业县| 蒙城县| 仙桃市| 衡水市| 云和县| 来凤县| 辽宁省| 蒙城县| 江津市| 汕头市| 尼木县| 九龙坡区| 藁城市| 建昌县| 青浦区| 繁峙县| 大同市| 吉木乃县| 阳泉市| 平昌县| 株洲县| 绥化市| 溧阳市| 疏勒县| 肥西县| 平安县| 衡山县| 共和县| 云霄县| 洛南县| 手机| 阜阳市| 吉安县| 镇平县| 泸定县| 太白县|