一尘不染

Hibernate的Transformers.aliasToBean()方法

hibernate

Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
“select proj_employee.employee_no as employeeNo, …
.setResultTransformer(Transformers.aliasToBean(User.class));

在User.class内部,属性employeeNo是否需要大写?

private String EMPLOYEENO; 
//get/set for EMPLOYEENO

如果我将更EMPLOYEENO改为 小写字母 ,将无法使用。谁能解释为什么变量名必须全为大写字母?


阅读 1427

收藏
2020-06-20

共1个答案

一尘不染

参见Hibernate
3.2:HQL和SQL的Transformers
博客文章:

SQL变形金刚

使用本机sql返回非实体bean或Map通常比basic更为有用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要求调用以使其与属性名称匹配,因为它以全大写形式返回列名称(例如“
STUDENTNAME”)。这也可以通过自定义的转换器来解决,该转换器搜索属性名称而不是使用完全匹配-
也许我们应该提供一种fuzzyAliasToBean()方法;)

也许您遇到的情况与技巧中所述的情况相同,在这种情况下,您应该尝试向添加呼叫addScalar()

2020-06-20