Hibernate's Transformers.aliasToBean() method

2022-09-02 23:33:55
 Query query =  getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
                 "select proj_employee.employee_no as employeeNo, ...
 .setResultTransformer(Transformers.aliasToBean(User.class));

内部用户.class物业雇用不需要大写字母?

private String EMPLOYEENO; 
//get/set for EMPLOYEENO


如果我将 更改为小写字母,则不起作用。谁能解释为什么变量名称必须全部大写?EMPLOYEENO


答案 1

请参阅Hibernate 3.2:Transformers for 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上需要调用以使其与属性名称匹配,因为它返回全大写的列名称(例如“STUDENTNAME”)。这也可以通过搜索属性名称而不是使用完全匹配的自定义转换器来解决 - 也许我们应该提供一个方法;)addScalar()fuzzyAliasToBean()

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


答案 2

考虑将列别名放在双引号中。Oracle 不会在双引号中指定大写别名。

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

;


推荐