Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
"select proj_employee.employee_no as employeeNo, ...
.setResultTransformer(Transformers.aliasToBean(User.class));
Inside User.class does the property employeNo need to be in capital letter?
private String EMPLOYEENO;
//get/set for EMPLOYEENO
If I change the EMPLOYEENO to small letter, it doesn't work. Can anyone explain why the variable name must be all capital letters?
See the Hibernate 3.2: Transformers for HQL and SQL blog post:
SQL Transformers
With native sql returning non-entity beans or Map's is often more useful instead of basic
Object[]. With result transformers that is now possible.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);Tip: the
addScalar()calls were required on HSQLDB to make it match a property name since it returns column names in all uppercase (e.g. "STUDENTNAME"). This could also be solved with a custom transformer that search the property names instead of using exact match - maybe we should provide afuzzyAliasToBean()method ;)
Maybe you are facing the same situation than the one described in the tip in which case you should try to add calls to addScalar().
Consider putting column aliases in double quotes. Oracle doesn't uppercase aliases specified in double quotes.
Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
"select proj_employee.employee_no \"employeeNo\", ...
.setResultTransformer(Transformers.aliasToBean(User.class))
;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With