2009-10-13 3 views
2

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

ответ

Смежные вопросы