Метод Transformers.aliasToBean () в Hibernate - PullRequest
12 голосов
/ 15 марта 2010
 Query query =  getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
                 "select proj_employee.employee_no as employeeNo, ...
 .setResultTransformer(Transformers.aliasToBean(User.class));

Внутри User.class Не нужно ли указывать имя объекта недвижимости заглавными буквами?

private String EMPLOYEENO; 
//get/set for EMPLOYEENO


Если я изменю EMPLOYEENO на маленькую букву , это не сработает. Кто-нибудь может объяснить, почему имя переменной должно состоять из заглавных букв?

Ответы [ 2 ]

25 голосов
/ 15 марта 2010

См. Hibernate 3.2: Трансформаторы для HQL и SQL сообщение в блоге:

SQL Transformers

С нативным SQL, возвращающим не-сущность бобы или карты часто полезнее вместо базового 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, чтобы он соответствовал имя свойства, так как оно возвращает столбец имена в верхнем регистре (например, "ИМЯ УЧЕНИКА"). Это также может быть решено с помощью специального трансформатора, который искать имена свойств вместо используя точное совпадение - возможно, нам следует предоставить метод fuzzyAliasToBean() ;)

Возможно, вы столкнулись с той же ситуацией, что и описанная в подсказке, и в этом случае вам следует попытаться добавить вызовы к addScalar().

13 голосов
/ 17 июня 2010

Попробуйте поместить псевдонимы столбцов в двойные кавычки. Oracle не вводит псевдонимы в верхнем регистре, указанные в двойных кавычках.

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

;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...