溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 南涧| 仪征市| 米脂县| 西城区| 三亚市| 湘西| 韶山市| 渑池县| 德惠市| 静海县| 陇川县| 桂阳县| 濉溪县| 汉阴县| 沧州市| 南丰县| 浦县| 德令哈市| 兴化市| 灵宝市| 微山县| 奉化市| 安化县| 武强县| 栖霞市| 建德市| 建阳市| 罗源县| 阿勒泰市| 沙雅县| 昭苏县| 城步| 南川市| 牙克石市| 肇州县| 同仁县| 新乐市| 江城| 柏乡县| 明光市| 邛崃市|