zoukankan      html  css  js  c++  java
  • createQuery与createSQLQuery两者区别是:

    原文地址:http://stta04.javaeye.com/blog/377633

    信息: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.miracle.dm.doc.catalog.model.DocCatalogInfo

    原来的查询语句:

    String sql = "select a.* from tb_doc_catalog a where a.cat_code like '"+catCode+"%'";
    Session session = this.getSession();
    try {
    List catNameList = session.createSQLQuery(sql).list();
    return catNameList ;
    } finally {
    releaseSession(session); //释放session
    }

    分析:原来是查询出来的字段并不能自动转换为bean对象。

    解决思路一(采用hql查询):

    String sql = "select a from DocCatalogInfo a where a.catCode like '"+catCode+"%'";
    List catNameList =getHibernateTemplate().find(sql);
    return catNameList ;
    ok,测试一下发现没问题,看来还是因为用原生sql查询的原因,网上搜一下:createsqlQuery返回对象,看到一篇文章才觉悟到:

    解决思路二(采用原生sql查询):

    String sql = "select a.* from tb_doc_catalog a where a.cat_code like '"+catCode+"%'";
    Session session = this.getSession();
    try {
    List catNameList = session.createSQLQuery(sql).addEntity(DocCatalogInfo.class).list();
    return catNameList ;
    } finally {
    releaseSession(session); //释放session
    }

    又ok了。

    该篇文章也贴上来:

    hibernate 中createQuery与createSQLQuery两者区别是:
    前者用的hql语句进行查询,后者可以用sql语句查询
    前者以hibernate生成的Bean为对象装入list返回
    后者则是以对象数组进行存储
    所以使用createSQLQuery有时候也想以hibernate生成的Bean为对象装入list返回,就不是很方便
    突然发现createSQLQuery有这样一个方法可以直接转换对象
    Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
    XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。
    呵呵以后多注意,还是时不时的要看看hibernate各个对象方法的使用。

    还有另外一个相关的小细节应注意:
    比如有这样一个po
    PO: User.class
    properties: userId,userName
    DDL: create table tuser (userid varchar(10),username varchar(20));
    当执行:
    session.createQuery("from User u").list()时生成的SQL:
    select userid,username from tuser;
    当执行:

    session.createQuery("from User u").iterator()时生成的SQL:
    select userid from tuser;
    可以看出list()一次将数据从数据库中读出直接填充到List中
    iterator()将数据的主键从数据库中读出,当循环这个Iterator时才添加执行:
    select userid,username from user where userid=?;把数据读出。
    在不同的应用范围使用不同的方法,具体在hibernate应用中应当注意

  • 相关阅读:
    Windows Azure Web Site (19) Azure Web App链接到VSTS
    Windows Azure Virtual Machine (35) Azure VM通过Linked DB,执行SQL Job
    Azure PowerShell (16) 并行开关机Azure ARM VM
    Windows Azure Virtual Network (12) 虚拟网络之间点对点连接VNet Peering
    Azure ARM (21) Azure订阅的两种管理模式
    Windows Azure Platform Introduction (14) 申请海外的Windows Azure账户
    Azure ARM (20) 将非托管磁盘虚拟机(Unmanage Disk),迁移成托管磁盘虚拟机(Manage Disk)
    Azure ARM (19) 将传统的ASM VM迁移到ARM VM (2)
    Azure ARM (18) 将传统的ASM VM迁移到ARM VM (1)
    Azure Automation (6) 执行Azure SQL Job
  • 原文地址:https://www.cnblogs.com/elite-2012/p/4114757.html
Copyright © 2011-2022 走看看