Java Hibernate Bug Falsche Parameterbindung

8

Ich habe diesen einfachen Hibernate-Code.

%Vor%

Das Problem ist die Parameter und irgendwie Störung oder gemischt oder in einer falschen Position jedes Problem tritt auf, wenn ich createAlias ​​beide mit mindestens einem Kriterium wie folgt erstellen (siehe Update unten)

createAlias ​​mit einigen Kriterien

%Vor%

Der erzeugte SQL scheint gut ..

%Vor%

Auch wenn ich log4j sehe, kann ich die falsche Bindung sehen

Sie können sehen, dass der Postleitzahlwert 1764 an den ersten Parameter gebunden ist, der Adresse2_.FDL

ist %Vor%

Später wird dem zweiten Parameter, der cid ist, der korrekte vorherige Wert für fdl zugewiesen, der 'N'

ist %Vor%

Später wird dem dritten Parameter, der did ist, der korrekte vorherige Wert für cid zugewiesen, der 1

ist %Vor%

Später wird dem vier Parameter, der zipCode ist, der korrekte vorherige Wert für did zugewiesen, der 2 ist %Vor%

Natürlich stimmt die generatedsql log4j-Bindung

überein %Vor%

Wie Sie sehen können, ist die Bindung eindeutig falsch.

Erwartet & lt; ---------------- & gt; Realität

%Vor%

Was ich denke passiert Hibernate mischen die Parameter-Positionen aus irgendeinem Grund.

Ich habe Hibernate 4.3.4 benutzt, als dieses Problem auftrat, aber ich sehe einen ähnlichen Fehler, der in 5.2.2 behoben wurde Ссылка und ich upgraden auf Hibernate 5.2.2 und das selbe Problem stolperte ich habe viele Foren gesehen, die dieses Problem melden, warum Hibernate es nicht repariert? Natürlich habe ich Workarounds, aber dieses Problem ist sehr ärgerlich

Wenn ich die 2 createAlias ​​mit nicht-Kriterium verwende, funktioniert alles wie erwartet

%Vor%

Umgebung

%Vor%

Ein anderes ähnliches Forum

%Vor%

AKTUALISIEREN

Die Parameter gehen falsch, auch wenn 2 Parameter

sind %Vor%

Wie Sie sehen können, ist die Bindung eindeutig falsch.

Erwartet & lt; ---------------- & gt; Realität

%Vor%     
chiperortiz 16.08.2016, 00:05
quelle

1 Antwort

6

... und das gleiche Problem rüber kommen Ich habe viele Foren gesehen, die dieses Problem melden, warum Hibernate es nicht behebt?

org.hibernate.Criteria API gilt als veraltet:

  

Hibernate bietet eine ältere, ältere org.hibernate.Criteria API, die   sollte als veraltet gelten. Keine Feature-Entwicklung wird angestrebt   diese APIs. Schließlich werden Hibernate-spezifische Kriterien Features sein   als Erweiterungen der JPA portiert    javax.persistence.criteria.CriteriaQuery .

Daher sollten Sie in zukünftigen Versionen keinen großen Aufwand im Zusammenhang mit org.hibernate.Criteria API (einschließlich Fehlerbehebung) erwarten.

Ich schlage vor, dass Sie zu JPA CriteriaQuery API migrieren. Allerdings mag ich es persönlich auch nicht, und ich benutze immer entweder JPQL / HQL direkt oder QueryDSL, was ich als eine sehr gute Balance zwischen JPQL-String und der hohen Ausführlichkeit von CriteriaQuery APIs empfinde.

    
Dragan Bozanovic 18.08.2016 10:58
quelle

Tags und Links