tags:

views:

370

answers:

2
 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 changed to small letter, it doesnt work. can anyone explain why must be in capital letter?

+1  A: 

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 a fuzzyAliasToBean() 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().

Pascal Thivent
Does it return column names in all uppercase for all DBMS's, or just Oracle?
Stefan Kendall
@Stefan Not all DBMS I think but not only Oracle (as mentioned above, HSQLDB also do so). So at the end, it depends and the best practice is to use `addScalar` if you want to guarantee portability.
Pascal Thivent
+1  A: 

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

;

Misha