Hibernate Transformers.aliasToBean()方法

时间:2010-03-15 04:33:15

标签: java hibernate

 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更改为小写字母,则无效。谁能解释为什么变量名必须都是大写字母?

2 个答案:

答案 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))