|
我有个User 实体类 里面很多栏位 、 通过hibernate注解生成的表、 而我每次查询的时候会查询全部的栏位、 所以我建立了一个UserDTO 里面就三个栏位 id 帐号 密码
在DAO查询的时候使用了 Transformers Query query = session.createQuery("select id ,account ,password from User").setResultTransformer(Transformers.aliasToBean(UserDTO.class));
结果就出来异常 网上总结的这个异常说是mapping.xml配置有问题。可我没用到hibernate写xml方式 用spring集成hibernateTemplate。 请教解决办法。 |
|
80分 |
首先请到数据库查询工具中检查下“select id ,account ,password from User”这条sql是否执行的通,其次检查下User类里的字段注解,最好调试下看看报错的具体语句。
|
|
另外,我若是使用sql 语句查询的话并且赋给VO(或DTO)
能成功、 Query query = session.createSQLQuery("select CN_ID as id ,CN_ACCOUNT as account ,CN_PASSWORD as password from TN_USER")
.addScalar("id", Hibernate.INTEGER)
.addScalar("account",Hibernate.STRING)
.addScalar("password",Hibernate.STRING)
.setResultTransformer(Transformers.aliasToBean(U.class));
为什么hql 就会有问题。 跪等大神、 下午再来看看、 |
|
|
User class { other properties; setter getter… UserDTO class{ setter getter… |
|
|
貌似自己解决了。。。
HQL 语句这样: session.createQuery("select id , account , password from User")
.setResultTransformer(new AliasToBeanResultTransformer(U.class))
.list();
顺便弱弱的问下: 为什么我提问的时候回答的人好少哦、 最后靠google 百度 和前人的经验总结才解决的、 为什么要new 一个呢 |
|
|
弱弱的问下楼主 为什么我用你说的不好使呢 报表或视图不存在 U和 User什么关系
|
|
|
嘿嘿 笔误、写错了 应该是User.class |
|
|
Could not find setter for 0 on class com.thid.framework.domain.SysUserInfoVO这个问题 LZ帮我看下 代码
String sql = "select sysUserId from SysUserInfo"; List<SysUserInfoVO> list = this.findBySQL4Entity(0, 100, sql, null, null, SysUserInfoVO.class);
public List findBySQL4Entity(final int begin, final int length, final String queryString, final Object conditionObject, final Map<String,Object> conditionMap,final Class T){
return getHibernateTemplate().executeFind(new HibernateCallback() {
public List doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(queryString).setResultTransformer(new AliasToBeanResultTransformer(T));
if(begin>-1){
query.setFirstResult(begin);
}
if(length>-1){
query.setMaxResults(length);
}
if(null != conditionObject){
query.setProperties(conditionObject);
}
if(null != conditionMap){
query.setProperties(conditionMap);
}
List list= query.list();
return list;
}
});
|
|
|
我是拿sql 语句写的 不是hql 然后给封装成一个User类里去了、 关于分页的话、 也写到一个方法里了、 return super.getHibernateTemplate().execute(new HibernateCallback<List>() {
@Override
public List doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createSQLQuery(sql);
query.setResultTransformer(new AliasToBeanResultTransformer(Merchant.class));
query.setFirstResult(page.getStartRowNum());
query.setMaxResults(page.getPageSize());
List list = query.list();
session.clear();
return list;
}
});
|
|
|
可你这里明明是用的hql啊 |
|
|
如果是hql的话 那根本不需要transformer了。 因为他(hibernate)直接帮你就转换过来了、 用transformer 的话 应该使用sql的、 |
|
|
session.createQuery(“select id ,account ,password from User”).setResultTransformer(Transformers.aliasToBean(UserDTO.class)); 如果UserDTO中id ,account属性是联合主键, SQL语句该如何写?
|
|
|
其实不需要建DTO的,只要你的User类里面有这三个属性的构造函数就可以了
|
|