0 0

使用Hibernate执行sqlk语句的问题0

在网上搜到Hibernate执行sql语句的方法,我在BaseDao写了如下的方法
public List<T> selectBySql(final Class<T> entityClass, final String sql,
final Object... values) {
return (List<T>) ht.execute(new HibernateCallback() {

public Object doInHibernate(Session s) throws HibernateException,
SQLException {
Query query = createSqlQuery(s, sql, values);
query.setResultTransformer(Transformers
.aliasToBean(entityClass));
List<T> result = query.list();
for(T t : result) {
DimTraficonMap dim = (DimTraficonMap)t;
}
return result;
}
});
}
其中的createSqlQuery为
public Query createSqlQuery(Session session, String sql, Object... objects) {
Query query = session.createSQLQuery(sql);
if (objects != null) {
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
}
return query;
}

class TestDao extends BaseDao {

public TestDao() {
super("./src/hibernateScott.cfg.xml");
}

public void get() {
String hql = "select * from dim_traficon_map dim where dim.ID=? and dim.ZONE_ID=?";
ArrayList<Object> paramObj = new ArrayList<Object>();
paramObj.add(BigDecimal.valueOf(124));
paramObj.add(BigDecimal.valueOf(1971));

List<DimTraficonMap> result = (List<DimTraficonMap>)super.selectBySql(DimTraficonMap.class, hql, paramObj.toArray());
System.out.println("Size:"+result.size());
}
}

当我执行
TestDao dao = new TestDao();
dao.get();
出现如下错误

Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Could not find setter for ID on class com.traffic.rest.data.bean.DimTraficonMap; nested exception is org.hibernate.PropertyNotFoundException: Could not find setter for ID on class com.traffic.rest.data.bean.DimTraficonMap
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339)
at com.traffic.rest.dao.BaseDao.selectBySql(BaseDao.java:92)
at test.TestDao.get(Test.java:100)
at test.Test.main(Test.java:83)

以下是相关的Bean:DimTraficonMap
package com.traffic.rest.data.bean;
// Generated 2012-6-1 9:58:20 by Hibernate Tools 3.2.0.b9


import java.math.BigDecimal;

/**
 *        @hibernate.class
 *         table="DIM_TRAFICON_MAP"
 *     
 */
public class DimTraficonMap  implements java.io.Serializable {


     /**
      *            @hibernate.id
 *             generator-class="assigned"
 *         
     */
     private DimTraficonMapPK comp_id;
     /**
      *            @hibernate.property
 *             column="IP"
 *             length="128"
 *         
     */
     private String ip;
     /**
      *            @hibernate.property
 *             column="CA"
 *             length="50"
 *         
     */
     private String ca;
     /**
      *            @hibernate.property
 *             column="LID"
 *             length="22"
 *             not-null="true"
 *         
     */
     private Integer lid;

    public DimTraficonMap() {
    }

	
    public DimTraficonMap(DimTraficonMapPK comp_id, Integer lid) {
        this.comp_id = comp_id;
        this.lid = lid;
    }
    public DimTraficonMap(DimTraficonMapPK comp_id, String ip, String ca, Integer lid) {
       this.comp_id = comp_id;
       this.ip = ip;
       this.ca = ca;
       this.lid = lid;
    }
   
    /**       
     *      *            @hibernate.id
     *             generator-class="assigned"
     *         
     */
    public DimTraficonMapPK getComp_id() {
        return this.comp_id;
    }
    
    public void setComp_id(DimTraficonMapPK comp_id) {
        this.comp_id = comp_id;
    }
    /**       
     *      *            @hibernate.property
     *             column="IP"
     *             length="128"
     *         
     */
    public String getIp() {
        return this.ip;
    }
    
    public void setIp(String ip) {
        this.ip = ip;
    }
    /**       
     *      *            @hibernate.property
     *             column="CA"
     *             length="50"
     *         
     */
    public String getCa() {
        return this.ca;
    }
    
    public void setCa(String ca) {
        this.ca = ca;
    }
    /**       
     *      *            @hibernate.property
     *             column="LID"
     *             length="22"
     *             not-null="true"
     *         
     */
    public Integer getLid() {
        return this.lid;
    }
    
    public void setLid(Integer lid) {
        this.lid = lid;
    }




}



package com.traffic.rest.data.bean;
// Generated 2012-6-1 9:58:20 by Hibernate Tools 3.2.0.b9


import java.math.BigDecimal;

/**
 * DimTraficonMapPK generated by hbm2java
 */
public class DimTraficonMapPK  implements java.io.Serializable {


     /**
      *                @hibernate.property
 *                 column="ID"
 *             
     */
     private BigDecimal id;
     /**
      *                @hibernate.property
 *                 column="ZONE_ID"
 *             
     */
     private BigDecimal zoneId;

    public DimTraficonMapPK() {
    }

    public DimTraficonMapPK(BigDecimal id, BigDecimal zoneId) {
       this.id = id;
       this.zoneId = zoneId;
    }
   
    /**       
     *      *                @hibernate.property
     *                 column="ID"
     *             
     */
    public BigDecimal getId() {
        return this.id;
    }
    
    public void setId(BigDecimal id) {
        this.id = id;
    }
    /**       
     *      *                @hibernate.property
     *                 column="ZONE_ID"
     *             
     */
    public BigDecimal getZoneId() {
        return this.zoneId;
    }
    
    public void setZoneId(BigDecimal zoneId) {
        this.zoneId = zoneId;
    }




}



2012年6月04日 13:33
目前还没有答案

相关推荐

    hibernate执行原生sql语句

    Hibernate 提供了多种方式来执行原生 SQL 语句,其中之一是使用 `Session.createSQLQuery()` 方法,该方法返回一个 `SQLQuery` 对象,该对象提供了执行原生 SQL 语句的方法。 例如,我们可以使用以下代码来执行一个...

    hibernate-HQL语句大全

    hibernate-HQL语句大全

    Hibernate中Sql语句

    ### Hibernate中使用SQL而非HQL语句的知识点详解 在Java开发中,Hibernate作为一个非常流行的ORM框架,提供了多种查询方式,其中就包括了HQL(Hibernate Query Language)和原生SQL查询。本文将针对给定代码片段中...

    hibernate 执行原生sql的几种方式

    虽然`Criteria API`主要是为了使用Hibernate的ORM功能,但也可以通过`Projections.sqlProjection()`执行原生SQL投影,从而创建自定义的查询。 ```java Criteria criteria = session.createCriteria(User.class); ...

    采用p6spy完整显示hibernate的SQL语句

    P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供执行时间、性能指标等详细信息,这对于优化...

    Hibernate生产SQL语句

    总结来说,模仿Hibernate生成SQL语句需要对Hibernate的ORM机制有深入理解,包括实体类的定义、属性映射、查询API的使用,以及Java反射的应用。通过这种方式,开发者可以自定义查询逻辑,同时利用Hibernate的强大功能...

    使用p6spy完整显示hibernate的SQL语句

    这篇博客“使用p6spy完整显示hibernate的SQL语句”可能详细解释了如何配置和使用p6spy来跟踪Hibernate生成并执行的SQL。 首先,`p6spy`是一个Java数据库代理库,它可以拦截并记录所有通过JDBC发送到数据库的SQL语句...

    Hibernate语句

    **Hibernate语句详解** Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。在Java开发中,它提供了一种抽象层,允许开发者使用面向对象的方式来处理数据库交互,而无需直接编写SQL语句。...

    hibernate通用查询语句生成类

    这是一个java代码包,里面提供了一个核心类,专门负责生成 hibernate查询语句(常用的,并非所有,现在能力有限),其他都是一些辅助类,自我感觉还可以。主要是为了减轻以后的项目开发负担,可以省去拼接hql查询语句的...

    让hibernate输出sql语句参数配置.doc

    下面将详细介绍 Hibernate 配置参数的用途和使用方法。 1. hibernate.dialect hibernate.dialect 是一个 Hibernate Dialect 类名,允许 Hibernate 针对特定的关系数据库生成优化的 SQL。其取值为 full.classname....

    Hibernate执行持久层访问步骤

    1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...

    Hibernate中查询语句

    Hibernate中的查询方法若HQL,详细讲解HQL与使用的具体例子

    Hibernate查询语句大全PPT精选

    学习Hibernate 的HQL语句的不错选择,

    Hibernate HQL查询语句总结.docx

    * 在 Hibernate3 中,可以使用 HQL 语句来进行实体的更新和删除操作。 * 使用 HQL 语句可以批量更新和删除数据,提高了性能。 * 例如:update User user set user.age=20 where user.age=18; * 例如:delete from ...

    hibernate hql where语句拼接工具类

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。HQL(Hibernate Query Language)是Hibernate提供的一个SQL的面向对象的查询语言,它使得开发者...

    hibernate执行外部sql

    标题“hibernate执行外部sql”指的是使用Hibernate框架执行存储在外部文件中的SQL语句。通常,Hibernate以其对象关系映射(ORM)能力著称,允许开发者通过Java对象来操作数据库,但有时我们仍需直接执行SQL,特别是...

    Hibernate常用查询语句

    Hibernate常用查询语句.doc

    Hibernate-HQL语句多对多写法

    但是,在使用 Hibernate 时,我们经常会遇到多对多关系的问题,例如在菜单(Menu)和权限(Privilege)之间的多对多关系。在这种情况下,我们需要使用 Hibernate 的 HQL 语言来编写查询语句,以便检索和操作数据。 ...

    Hibernate调用配置文件中的sql语句

    在传统的Hibernate应用中,我们通常使用HQL(Hibernate Query Language)或者Criteria API来执行查询。然而,有时候我们可能需要执行更复杂的自定义SQL,这时就需要在配置文件中引入SQL语句。以下是一些关键步骤: ...

    Hibernate中HQL语句的使用[参考].pdf

    Hibernate中HQL语句的使用 HQL(Hibernate Query Language)是 Hibernate 框架中的一种查询语言,它允许开发者使用面向对象的方式来查询数据库。HQL语句的使用是Hibernate中最重要的部分之一,本文将详细介绍HQL...

Global site tag (gtag.js) - Google Analytics