Hibernate的Transformers.aliasToBean()方法

com*_*tta 12 java hibernate

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

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

private String EMPLOYEENO; 
//get/set for EMPLOYEENO
Run Code Online (Sandbox Code Playgroud)


如果我改变了EMPLOYEENO小信,这是行不通的.任何人都可以解释为什么变量名必须全是大写字母?

Pas*_*ent 25

请参阅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);
Run Code Online (Sandbox Code Playgroud)

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

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


Mis*_*sha 13

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

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

;