Code Bye

hibernate Transformers的问题

 

   我有个User 实体类   里面很多栏位 、 通过hibernate注解生成的表、

   而我每次查询的时候会查询全部的栏位、

   所以我建立了一个UserDTO   里面就三个栏位 id 帐号 密码

   

   在DAO查询的时候使用了  Transformers

Query query = session.createQuery("select id ,account ,password from User").setResultTransformer(Transformers.aliasToBean(UserDTO.class));

   结果就出来异常
org.hibernate.PropertyNotFoundException: Could not find setter for 0 on class cn.local.projects.domain.UserDTO

  
   照官方例子弄的、
http://swik.net/Hibernate/Hibernate+GroupBlog/Hibernate+3.2:+Transformers+for+HQL+and+SQL/cmxs

   网上总结的这个异常说是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 就会有问题。

跪等大神、

下午再来看看、

引用 1 楼  的回复:

首先请到数据库查询工具中检查下“select id ,account ,password from User”这条sql是否执行的通,其次检查下User类里的字段注解,最好调试下看看报错的具体语句。

User class {
   int id ;
   String account;
   String password;

   other properties;
 

   setter getter…
   还有一些注解的annotion
   
}

UserDTO class{
   int id ;
   String account;
   String password;

   setter getter…
}

貌似自己解决了。。。

HQL 语句这样:

session.createQuery("select id , account , password  from User")
                 .setResultTransformer(new AliasToBeanResultTransformer(U.class))
                 .list();

顺便弱弱的问下:

为什么我提问的时候回答的人好少哦、
我的帖子回答的人都不多哦、

最后靠google 百度 和前人的经验总结才解决的、

为什么要new 一个呢

弱弱的问下楼主  为什么我用你说的不好使呢  报表或视图不存在 U和 User什么关系 
引用 5 楼  的回复:

弱弱的问下楼主  为什么我用你说的不好使呢  报表或视图不存在 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;
            }
        });
引用 7 楼  的回复:

Could not find setter for 0 on class com.thid.framework.domain.SysUserInfoVO这个问题  LZ帮我看下  代码
Java code

String sql = “select sysUserId from SysUserInfo”;
        List<SysUserInfoVO> list = this.fin……

我是拿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;
				}
	    
			});
引用 4 楼  的回复:

貌似自己解决了。。。

HQL 语句这样:

Java code

session.createQuery(“select id , account , password  from User”)
                 .setResultTransformer(new AliasToBeanResultTransformer(U.class))
     ……

可你这里明明是用的hql啊

引用 9 楼  的回复:

引用 4 楼  的回复:
貌似自己解决了。。。

HQL 语句这样:

Java code

session.createQuery(“select id , account , password  from User”)
.setResultTransformer(new AliasToBeanResultTransformer(U.class))
……

……

如果是hql的话  那根本不需要transformer了。 因为他(hibernate)直接帮你就转换过来了、

用transformer  的话  应该使用sql的、

session.createQuery(“select id ,account ,password from User”).setResultTransformer(Transformers.aliasToBean(UserDTO.class)); 如果UserDTO中id ,account属性是联合主键, SQL语句该如何写?
其实不需要建DTO的,只要你的User类里面有这三个属性的构造函数就可以了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hibernate Transformers的问题