码迷,mamicode.com
首页 > 数据库 > 详细

SQL查询(笔记2——实体查询)

时间:2015-03-31 10:24:19      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

SQL查询(笔记2——实体查询)   

      二、实体查询

       如果查询返回了某个数据表的全部数据列,且该数据表有对应的持久化类映射,我们就把查询结果转换成实体查询。将查询结果转换成实体,可以使用SQLQuery提供的多个重载addEntity()方法。

       String sqlString = "select * from enrolment where year=:year";

       List l = session.createSQLQuery (sqlString)

                   //指定查询的记录行转换成Enrolment实体

                   .addEntity(Enrolment.class)

                   //为SQL字符串的参数设置值

                   .setInteger("year",2005)

                   .list();

注意:使用原生SQL查询时,程序必须选出所有数据列才可转换成持久化实体。假设实体在映射时有一个<many-to-one/>管来指向另一个实体,则SQL查询中必须返回该<many-to-one/>映射的外键列,否则将导致抛出"column not found"异常。最简单的做法是,在SQL字符串中使用(*)来表示返回所有列。

Hibernate支持将查询结果转换成多个实体,如果要将查询结果转换成多个实体,则SQL字符串中应为不同数据表指定不同别名,并调用addEntity(String alias, Class entityClass)方法将不同数据表转换成不同实体。程序片段如下:

String sqlString = "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 ";

List l = session.createSQLQuery(sqlString)

           .addEntity("s",Student.class)

           .addEntity("e",Enrolment.class)

           .addEntity("c",Course.class)

三、将查询加过转换成非持久化实体

只要该JavaBean为这些数据列提供了对应的getter和setter方法即可。

Query接口提供了一个setResultTransformer()方法,该方法接受一个Transformers对象,通过使用该对象的方法(如aliasToBean()方法)即可把查询到的结果集转换成JavaBean集。

SQL查询(笔记2——实体查询)

标签:

原文地址:http://www.cnblogs.com/Rozdy/p/4380006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!