-
使用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:DimTraficonMappackage 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 语句,其中之一是使用 `Session.createSQLQuery()` 方法,该方法返回一个 `SQLQuery` 对象,该对象提供了执行原生 SQL 语句的方法。 例如,我们可以使用以下代码来执行一个...
hibernate-HQL语句大全
### Hibernate中使用SQL而非HQL语句的知识点详解 在Java开发中,Hibernate作为一个非常流行的ORM框架,提供了多种查询方式,其中就包括了HQL(Hibernate Query Language)和原生SQL查询。本文将针对给定代码片段中...
虽然`Criteria API`主要是为了使用Hibernate的ORM功能,但也可以通过`Projections.sqlProjection()`执行原生SQL投影,从而创建自定义的查询。 ```java Criteria criteria = session.createCriteria(User.class); ...
P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供执行时间、性能指标等详细信息,这对于优化...
总结来说,模仿Hibernate生成SQL语句需要对Hibernate的ORM机制有深入理解,包括实体类的定义、属性映射、查询API的使用,以及Java反射的应用。通过这种方式,开发者可以自定义查询逻辑,同时利用Hibernate的强大功能...
这篇博客“使用p6spy完整显示hibernate的SQL语句”可能详细解释了如何配置和使用p6spy来跟踪Hibernate生成并执行的SQL。 首先,`p6spy`是一个Java数据库代理库,它可以拦截并记录所有通过JDBC发送到数据库的SQL语句...
**Hibernate语句详解** Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。在Java开发中,它提供了一种抽象层,允许开发者使用面向对象的方式来处理数据库交互,而无需直接编写SQL语句。...
这是一个java代码包,里面提供了一个核心类,专门负责生成 hibernate查询语句(常用的,并非所有,现在能力有限),其他都是一些辅助类,自我感觉还可以。主要是为了减轻以后的项目开发负担,可以省去拼接hql查询语句的...
下面将详细介绍 Hibernate 配置参数的用途和使用方法。 1. hibernate.dialect hibernate.dialect 是一个 Hibernate Dialect 类名,允许 Hibernate 针对特定的关系数据库生成优化的 SQL。其取值为 full.classname....
1. HQL查询:使用Session的createQuery()方法创建HQL(Hibernate Query Language)查询对象,然后设置参数,最后调用list()或uniqueResult()执行查询。 2. QBC查询:Query By Criteria API允许基于Java对象属性进行...
Hibernate中的查询方法若HQL,详细讲解HQL与使用的具体例子
学习Hibernate 的HQL语句的不错选择,
* 在 Hibernate3 中,可以使用 HQL 语句来进行实体的更新和删除操作。 * 使用 HQL 语句可以批量更新和删除数据,提高了性能。 * 例如:update User user set user.age=20 where user.age=18; * 例如:delete from ...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。HQL(Hibernate Query Language)是Hibernate提供的一个SQL的面向对象的查询语言,它使得开发者...
标题“hibernate执行外部sql”指的是使用Hibernate框架执行存储在外部文件中的SQL语句。通常,Hibernate以其对象关系映射(ORM)能力著称,允许开发者通过Java对象来操作数据库,但有时我们仍需直接执行SQL,特别是...
Hibernate常用查询语句.doc
但是,在使用 Hibernate 时,我们经常会遇到多对多关系的问题,例如在菜单(Menu)和权限(Privilege)之间的多对多关系。在这种情况下,我们需要使用 Hibernate 的 HQL 语言来编写查询语句,以便检索和操作数据。 ...
在传统的Hibernate应用中,我们通常使用HQL(Hibernate Query Language)或者Criteria API来执行查询。然而,有时候我们可能需要执行更复杂的自定义SQL,这时就需要在配置文件中引入SQL语句。以下是一些关键步骤: ...
Hibernate中HQL语句的使用 HQL(Hibernate Query Language)是 Hibernate 框架中的一种查询语言,它允许开发者使用面向对象的方式来查询数据库。HQL语句的使用是Hibernate中最重要的部分之一,本文将详细介绍HQL...