Hibernate的Transformers.aliasToBean()方法

Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery( "select proj_employee.employee_no as employeeNo, ... .setResultTransformer(Transformers.aliasToBean(User.class)); 

在User.class中,属性employeesNo需要是大写字母吗?

 private String EMPLOYEENO; //get/set for EMPLOYEENO 

如果我将EMPLOYEENO更改为小写字母 ,则不起作用。 任何人都可以解释为什么变量名必须全是大写字母?

请参阅Hibernate 3.2:HQL和SQL的变形金刚博客文章:

SQL变形金刚

使用本机sql返回非实体bean或Map通常更有用,而不是基本的Object[] 。 现在可以使用结果变换器。

 List resultWithAliasedBean = s.createSQLQuery( "SELECT st.name as studentName, co.description as courseDescription " + "FROM Enrolment e " + "INNER JOIN Student st on e.studentId=st.studentId " + "INNER JOIN Course co on e.courseCode=co.courseCode") .addScalar("studentName") .addScalar("courseDescription") .setResultTransformer( Transformers.aliasToBean(StudentDTO.class)) .list(); StudentDTO dto =(StudentDTO) resultWithAliasedBean.get(0); 

提示:HSQLDB上需要addScalar()调用以使其与属性名称匹配,因为它以全部大写forms返回列名(例如“STUDENTNAME”)。 这也可以通过搜索属性名称而不是使用完全匹配的自定义转换器来解决 – 也许我们应该提供fuzzyAliasToBean()方法;)

也许你面临的情况与提示中描述的情况相同,在这种情况下你应该尝试添加对addScalar()调用。

考虑将列别名放在双引号中。 Oracle没有使用双引号指定的大写别名。

 Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery( "select proj_employee.employee_no \"employeeNo\", ... .setResultTransformer(Transformers.aliasToBean(User.class)) 

;