Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
"select proj_employee.employee_no as employeeNo, ...
.setResultTransformer(Transformers.aliasToBean(User.class));在User.class内部,employeNo需要大写字母吗?
private String EMPLOYEENO;
//get/set for EMPLOYEENO如果我把EMPLOYEENO改为小写字母,它就不工作了。有人能解释为什么变量名必须都是大写字母吗?
发布于 2010-03-15 04:59:25
请参阅Hibernate 3.2:用于HQL和SQL的转换器博客文章:
SQL变压器 使用本机sql返回非实体bean或Map通常比基本的
Object[]更有用。结果变压器现在是可能的。 列表resultWithAliasedBean = s.createSQLQuery(“选择st.name作为studentName,co.description as courseDescription”+“从招生e”+“内加入学生在e.studentId=st.studentId上”+“内连接课程合作在e.courseCode=co.courseCode上”) .addScalar("studentName") .addScalar("courseDescription") .setResultTransformer( Transformers.aliasToBean(StudentDTO.class)) .list();StudentDTO dto =(StudentDTO.class).setResultTransformer(0); 提示: HSQLDB上需要addScalar()调用才能使其匹配属性名,因为它返回所有大写的列名(例如:"STUDENTNAME")。这也可以通过一个自定义转换器来解决,它可以搜索属性名而不是使用完全匹配--也许我们应该提供一个fuzzyAliasToBean()方法;)
可能您所面临的情况与技巧中描述的情况相同,在这种情况下,您应该尝试向addScalar()添加调用。
发布于 2010-06-17 13:24:52
考虑将列别名放在双引号中。Oracle不使用双引号指定大写别名。
Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
"select proj_employee.employee_no \"employeeNo\", ...
.setResultTransformer(Transformers.aliasToBean(User.class));
https://stackoverflow.com/questions/2445092
复制相似问题