То, что я собираюсь описать, это немного устаревшего кода. Так что есть много вещей, которые я не могу коснуться / изменить.
Этот псевдокод хорошо работает в 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-отображения для этого грязного зверя.