Hibernate führt eine Liste mit Nullwerten zurück, wenn Oracle-Ansichten abgefragt werden

8

Beim Abfragen von Oracle-Ansichten mit Hibernate 4 erhalte ich eine Liste mit einer Größe größer als 0, die die Anzahl der Elemente darstellt, die ich bekomme, wenn ich dieselbe Abfrage in SQL Developer zum Beispiel abspiele. Wenn ich die Liste durchlaufe, bekomme ich jedoch nur Nullwerte.

Meine hibernate.cfg.xml sieht folgendermaßen aus:

%Vor%

Die VwPersoneelslid.hbm.xml sieht wie folgt aus:

%Vor%

Die Funktion mit der Abfrage ist:

%Vor%

Die Funktion wurde in natives SQL umgewandelt:

%Vor%

Wenn Sie mehr Informationen benötigen, um zu erfahren, was das Problem sein könnte, lassen Sie es mich wissen und ich füge mehr Code hinzu. Die Datei VwPersoneelslid.hbm.xml wird automatisch von Eclipse generiert. Danke.

    
Snels Nick 09.08.2013, 13:09
quelle

4 Antworten

4

Ich habe einen Workaround erstellt. Das Problem liegt zumindest darin, dass die Hibernate Tools Composite-IDs erstellen. Wobei ich nicht richtig arbeiten kann, ohne durch mehrere Reifen zu springen. So konnte ich die Composite-ID loswerden. In meiner reveng.xml Datei habe ich hinzugefügt:

%Vor%

Dies erzeugt eine einzige ID (PK_VW_PERSONEELSLID) und erlaubt mir weiterhin die Hibernate Tools zu verwenden. Ich weiß nicht, ob das eine schmutzige Lösung ist. Wird das wahrscheinlich in ein paar Tagen herausfinden.

    
Snels Nick 19.08.2013, 13:16
quelle
2

Hibernate HQL Queries befasst sich mit Entitäten. Ansichten sind das Konzept von Datenbank- oder SQL-Schema. Wenn wir Daten mit HQL abfragen, erwähnen wir den Entitätsnamen und die Entitätseigenschaften. Wenn Sie also Abfragen aus Sichten abfragen möchten, verwenden Sie Core SQL-Abfragen mit Hibernate anstelle von HQL-Abfragen.

    
Harmeet Singh Taara 13.08.2013 06:49
quelle
2

Vor allem: Entschuldigung für das schlechte Format, aber auf meinem 3 "Bildschirm Handy schreiben e ist ein Schmerz ...)
IMO das Problem ist, dass Ihre Entität nur durch die ID besteht. Hibernate holt id wahrscheinlich während der Abfrage und findet eine gültige Anzahl von Objekten (Ihre Listengröße). Wenn es Zeit ist, die ID während des Dehydrierens in eine gemappte Entity zu konvertieren, wird es Probleme beim Abrufen von echten Daten und beim Aufbauen Ihrer Entity geben Ausschließen diese sind Teil der ID und laufen in eine Art von Select-Null aus Tabelle, wo ID-Felder = Prefetch-ID - nur eine Idee, das ist, warum Sie eine Liste mit Nullen gefüllt bekommen. Wenn Sie Ihre Composite-ID überdenken können oder versuchen, weitere Entitäten hinzuzufügen. Hoffnung kann helfen, zu lösen oder auf eine Lösung hinzuweisen. Hibernate-Tools generieren manchmal seltsame Zuordnungen ... Sonst arbeitet mit nativer Abfrage, addScalar () (anstelle von addEntity) und einem Aliastobe-Ergebnistransformator kann ein Workaround sein (wenn Sie eine Readonly-View zuordnen, kann dies sinnvoll sein)

Verwenden von SQLQuery:

session.createSQLQuery("select pkVwPersoneelslid, fkVwFunctie, familienaam, voornaam, code from VW_PERSONEELSLID where code = :code") .setParameter("code", code) .addScalar("pkVwPersoneelslid",DoubleType.INSTANCE) .addScalar("fkVwFunctie",DoubleType.INSTANCE) .addScalar("familienaam",StringType.INSTANCE) .addScalar("voornaam".StringType.INSTANCE) .addScalar("code".StringType.INSTANCE) .setResultTransformer(new AliasToBeanResultTransformer(VwPersoneelslid.class)) .list();

Sie benötigen einen leeren Konstruktor und Setter / Getter; für irgendwelche Fragen über überprüfen dies SO Antwort.

    
Luca Basso Ricci 13.08.2013 10:10
quelle
0

Wenn Sie wissen, dass Ihre Spalte, die Sie abfragen, Nullwerte enthalten kann, dann empfehle ich Ihnen, der Abfrage NVL (ColumnName, value) hinzuzufügen.

Für zB:

%Vor%

Sie können auch COALESCE

verwenden %Vor%

Das hat mein Problem gelöst.

Korrigiere mich, wenn ich falsch liege.

    
Dushyanth 03.05.2016 02:46
quelle

Tags und Links