Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
"select proj_employee.employee_no as employeeNo, ...
.setResultTransformer(Transformers.aliasToBean(User.class));
Inside User.class 雇员是否需要使用大写字母?
private String EMPLOYEENO;
//get/set for EMPLOYEENO
如果我将EMPLOYEENO
更改为小写字母,则无效。谁能解释为什么变量名必须都是大写字母?
答案 0 :(得分:25)
请参阅Hibernate 3.2: Transformers for HQL and 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);
提示:
addScalar()
来电是 HSQLDB上需要使其匹配a 属性名称,因为它返回列 全部大写的名称(例如 “学生姓名”)。这也可能是 解决了定制变压器 搜索属性名称而不是 使用完全匹配 - 也许我们应该 提供fuzzyAliasToBean()
方法 ;)
也许您遇到的情况与提示中描述的情况相同,在这种情况下,您应尝试添加对addScalar()
的调用。
答案 1 :(得分:13)
考虑将列别名放在双引号中。 Oracle没有使用双引号指定的大写别名。
Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
"select proj_employee.employee_no \"employeeNo\", ...
.setResultTransformer(Transformers.aliasToBean(User.class))