JPA + Hibernate: изменение поведения createNativeQuery () + getResultList ()?

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

Этот псевдокод хорошо работает в 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-карт для этого грязного зверя.

13.10.2009 05:12:42
2 ОТВЕТА
РЕШЕНИЕ

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

2
13.10.2009 05:56:09
но похоже, что у EntityManager нет этого метода «createSQLQuery». Как мы могли бы использовать его через JPA?
ricky 21.06.2010 05:54:13

Добавьте GET_COLUMN_LABEL_FOR_NAME=trueв URL-адрес соединения источник данных:

<connection-url>jdbc:sybase:Tds:[hostname]:[port]?GET_COLUMN_LABEL_FOR_NAME=true</connection-url>
0
17.09.2019 14:49:58