zoukankan      html  css  js  c++  java
  • SQL查询(笔记2——实体查询)

    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集。

  • 相关阅读:
    存储过程语法
    ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes.
    ORACLE 存储过程异常捕获并抛出
    Sqlldr导入txt文件内容到数据库中
    ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
    oracle将一个表中字段的值赋值到另一个表中字段(批量)
    (三)Solr——Solr的基本使用
    (二)Solr——Solr界面介绍
    jrebel 7免费激活(非破解) 和 IntelliJ Idea 2017 免费激活方法
    (一)Solr——简介和安装配置
  • 原文地址:https://www.cnblogs.com/Rozdy/p/4380006.html
Copyright © 2011-2022 走看看