2016-11-29 2 views
0

Ich versuche, das Verhalten von "update versioniert" von Hibernate in OpenJPA zu replizieren:JPA - wie Update versioniert Abfrage von Hibernate zu replizieren in openjpa

em.createQuery("update versioned MyEntity m set m.otherEntity=null where m.otherEntity=:otherEntity).setParameter("otherEntity", otherEntity).executeUpdate(); 

ich die gleiche Abfrage in openjpa versucht, aber Ich bekomme einen Fehler für diese Abfrage (es nimmt die "versioniert" als Alias), also ist es eindeutig eine HQL-Funktion.

+1

klar das ist ungültige JPQL also was erwarten Sie? 'UPDATE entity_name [[AS] identification_variable] SET update_item {, update_item} * WO ...' –

+0

Ich erwarte eine Antwort und erwähne nicht, was ich selbst herausgefunden habe und schreibe es in den Text der Frage. –

Antwort

0

Hibernate spec:

mit der EJB3-Spezifikation Im Einklang HQL UPDATE-Anweisungen, die standardmäßig haben keinen Einfluss auf die Version oder die Zeitstempel Eigenschaftswerte für die betroffenen Einheiten. Sie können jedoch erzwingen, dass Hibernate die Werte der Versions- oder Zeitmarkeneigenschaften mithilfe eines versionierten Updates zurücksetzt. Dies wird erreicht, indem das Schlüsselwort VERSIONED nach dem Schlüsselwort UPDATE hinzugefügt wird.

so hat HQL die Möglichkeit, die jedoch in OpenJPA zurücksetzen Version versioniert Update zu verwenden:

Bulk-Update-Karten direkt in eine Datenbank Aktualisierungsoperation, optimistische Sperren Kontrollen zu umgehen. Portable Anwendungen müssen den Wert der Versionsspalte bei Bedarf manuell aktualisieren und/oder den Wert der Versionsspalte manuell überprüfen.

Verwandte Themen