Hibernate-命名SQL查询

Hibernate使用<sql-query/>元素来配置命名SQL查询,配置<sql-query/>元素有一个必填的name属性,该属性用以指定该命名SQL查询的名称。

使用<sql-query/>元素定义命名查询时,通常可以包含一个或多个的如下子元素:
<return/>:将查询结果转换成持久化实体。

<return-join/>:预加载持久化实体的关联实体。

<return-scalar>:将查询的数据列转换成标量值。

在使用命名SQL查询时,不需要调用addEntity()、addScalar()等方法,因为在配置命名SQL查询时,已经指定了查询返回的结果信息。

<sql-query name="queryTest">

        <!--将s别名转换成lee.Student实体-->

        <return alias="s" class="lee.Student"/>

        <!--将e别名转换成lee.Enrolment实体-->

        <return alias="e" class="lee.Enrolment"/>

        <!--预初始化e的course属性(关联实体)-->

        <return-join alias="c" class="e.course"/>

        <!--指定将student表的name列作为标量返回-->

        <return-scalar column="s.name" type="string"/>

       select s.*,e.*,c.* from student s,enrolment e,course c

       where s.student_id = e.student_id and e.course_code = c.course_code

       and e.year =: targetYear

</sql-query>

使用Session的getNamedQuery即可获取指定命名SQL查询,代码片段如下:

List l = session.getNamedQuery("queryTest")

            .setInteger("targetYear",2005)

            .list();

除此之外,Hibernate允许把结果集的映射信息放在<resultset/>元素来定义,这样就可让多个命名查询公用结果集映射。通过<sql-query/>元素制定resultset-ref属性,就可让命名SQL查询使用一个已有的结果映射了。例如,定义一个独立的结果集映射:

<resultset name="studentGroup">

          <return alias="s" class="lee.Student"/>

          <return-scalar column="s.name" type="string"/>

</resultset>

下面的命名SQL查询就可使用上面的结果集映射信息了:

<sql-query name="test" resultset-ref="studentGroup">

select s.* from student s

</sql-query>


你可能感兴趣的:(sql,c,Hibernate,session,list,Class)