2 Stimmen

JPA+Hibernate: Änderung des Verhaltens von createNativeQuery() + getResultList()?

Was ich beschreiben werde, ist ein Stück Legacy-Code. Es gibt also eine Menge Dinge, die ich nicht anfassen/ändern kann.

Dieser Pseudocode läuft gut in 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

}

Also, es funktioniert.

Jetzt versuche ich, den Jboss-Server auf 5.1.0GA zu aktualisieren, was eine aktuellere Version von hibernate verwenden wird

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

Dann erhielt ich diese Ausnahme:

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

Ich glaube, es liegt daran, dass diese Version von Hibernate versucht, die Ergebnismenge in die Klasse obj1 bzw. obj2 abzubilden. Diese Java-Klassen werden an anderer Stelle in dieser Anwendung über JPA ordnungsgemäß aus der Datenbank abgerufen (d. h. wir haben alle @Entity, @Table und @Column usw. auf die Klassen obj1 und obj2 angewendet). Da die id-Spalten in dieser chaotischen Abfrage einem anderen Alias zugeordnet sind, ist der ORM fehlgeschlagen.

Jetzt kommt meine Frage:

Kann ich die automatische Zuordnung der nativen Abfrage irgendwo deaktivieren?

Ich möchte vermeiden, dass ich mir die Mühe mache, ein SQL-Mapping für dieses chaotische Ungetüm zu definieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X