JPA + Hibernate: изменение поведения createNativeQuery () + getResultList ()? - PullRequest
2 голосов
/ 13 октября 2009

То, что я собираюсь описать, это немного устаревшего кода. Так что есть много вещей, которые я не могу коснуться / изменить.

Этот псевдокод хорошо работает в Jboss 4.0.3,

big_messy_sql = "select t1.f1 as somealias, t2.f2 as somehthingelse  from obj1 t1, obj2 t2 where crazy_conditions....";

Query query = entityManager.createNativeQuery(big_messy_sql);


List<Object> results = query.getResultList();

for (Object oRow : results) {
    Object[] r = (Object[]) oRow;
    // Do more crazy stuff

}

Итак, это работает.

Сейчас я пытаюсь обновить сервер Jboss до 5.1.0GA, который будет использовать более современную версию hibernate

15:39:02,089 INFO  [Version] Hibernate Annotations 3.4.0.GA
15:39:02,167 INFO  [Environment] Hibernate 3.3.2.GA
15:39:02,183 INFO  [Environment] hibernate.properties not found
15:39:02,198 INFO  [Environment] Bytecode provider name : javassist
15:39:02,198 INFO  [Environment] using JDK 1.4 java.sql.Timestamp handling
15:39:02,495 INFO  [Version] Hibernate Commons Annotations 3.1.0.GA
15:39:02,511 INFO  [Version] Hibernate EntityManager 3.4.0.GA

Тогда я получил это исключение:

12:06:09,031 INFO  [BigDecimalType] could not read column value from result set: id; S0022: Invalid column name 'id'.

Я полагаю, это потому, что эта версия hibernate пыталась отобразить набор результатов в класс obj1 и obj2 соответственно. Эти java-классы извлекаются из базы данных через JPA надлежащим образом в других местах этого приложения (т. Е. У нас есть все @Entity, @Table, @Column и т. Д., Примененные к классу obj1 и obj2.) Поскольку столбцы id связываются с чем-то другим этот грязный запрос, ORM не удалось.

А вот и мой вопрос:

Можно ли где-нибудь отключить автоматическое сопоставление собственного запроса?

Я хочу избегать целых девяти ярдов определения SQL-отображения для этого грязного зверя.

1 Ответ

2 голосов
/ 13 октября 2009

Вместо использования сопоставления SQL вы можете добиться этого, используя createSQLQuery и addEntity . Проверить http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html

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