我有个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类里面有这三个属性的构造函数就可以了
|