Переменная извлечения SQLquery - PullRequest
2 голосов
/ 08 августа 2010

Как я могу извлечь переменные итого, мин, макс из спящих SQL-запросов и назначить их переменным java?

(select count(*) as total, min(price) as min, max(price) as max from product).addScalar("total", Hibernate.INTEGER).addScalar("min", Hibernate.INTEGER).addScalar("max", Hibernate.INTEGER);

Ответы [ 2 ]

7 голосов
/ 08 августа 2010

Этот пост должен вам помочь.

Позднее редактировать:

String sQuery = "select min(myEntity.x), max(myEntity.y) from MyEntity myEntity";
Query hQuery = session.createQuery(sQuery);
List result = hQuery.list();

Iterator iterator = result.iterator();

while (iterator.hasNext()) {
    Object[] row = (Object[])iterator.next();
    for (int col = 0; col < row.length; col++) {
        System.out.println(row[col]);
    }
}
0 голосов
/ 08 августа 2010

Скалярные запросы возвращают List из Object массивов (Object[]) - или один Object[] в вашем случае.

Однако можно вернуть неуправляемых объектов , используя ResultTransformer.Цитирование Hibernate 3.2: Transformers for 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);

Совет: для HSQLDB требовались вызовы addScalar(), чтобы он соответствовал имени свойства, так как он возвращает имена столбцов в верхнем регистре (например, «STUDENTNAME»).Эту проблему также можно решить с помощью специального преобразователя, который ищет имена свойств вместо точного соответствия - возможно, нам следует предоставить метод fuzzyAliasToBean();)

См. Также

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