То, что я собираюсь описать, - это немного устаревший код. Поэтому есть много вещей, которые я не могу коснуться/изменить.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, который будет использовать больше версии уточненного в спящем режиме
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 не удалось.
вот мой вопрос:
Есть ли где-нибудь я могу отключить автоматическое отображение Native запроса?
Я хочу избежать всех девяти ярдов определения сопоставления SQL для этого беспорядочного зверя.
, но это похоже, что EntityManager не имеет этого метода «createSQLQuery». Как мы можем использовать его через JPA? – ricky