JPA-Aktualisierung mehrere Zeilen und Tabellen
brauche ich zum aktualisieren mehrerer Zeilen in der Tabelle ein und es scheint ok, um das Objekt-orientierten Ansatz mit einer for-Schleife und macht einen merge.
...
//get list and assign columns to be updated
...
for (MyEntity e : entityList) {
em.merge(e);
}
..
dieser Ansatz ermöglicht auch mich zu update anderen Tabellen (andere Eigenschaft pf MyEntity).
auf eine der Fragen, die hier gepostet die Aktualisierung mehrere Zeilen mit JPA , die zweite option verwendet ein namedQuery zu aktualisieren scheint schneller zu sein. Aber wie wird das update durchgeführt werden, wenn ich brauchen, um batch-update mehrere Tabellen, wie gut?
habe ich versucht:
@NamedQuery(name="Agent.updateAccountStatusByTree",
query="UPDATE com.sample.core.data.Agent a "
+ "INNER JOIN com.sample.core.data.Player p "
+ "ON a.player.id = p.id "
+ "SET a.accountStatus=:accountStatus, p.status=:accountStatus "
+ "WHERE a.site.id=:siteId and a.agentTree like :agentTree")})
aber das wirft ein:
org.hibernate.hql.ast.QuerySyntaxException: expecting "set", found 'INNER'
weitere option, die ich versucht habe, ist:
@NamedQuery(name="Agent.updateAccountStatusByTree",
query="update com.sample.core.data.Agent a "
+ "set a.accountStatus=:accountStatus, a.player.status=:playerStatus "
+ "where a.site.id=:siteId and a.agentTree like :agentTree")})
da ich schon einen finden der anderen Tabelle, jedoch generiert dies eine ungültige Abfrage wirft eine sql-Grammatik Ausnahme... gibt es eine andere Möglichkeit, dies zu erreichen?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe er das Gefühl, dass Sie versuchen, die Konkurrenz zu falsche. Die Benannte Abfrage sollte eine JPQL (HQL) - Abfrage, aber es sieht aus wie Sie versuchen, eine SQL-Abfrage.
So wollen, den Einsatz von nativen Abfragen, dann sollten Sie
@NamedNativeQuery
statt. Wenn du nicht übersetzen müssen Sie die Abfrage, um JPQL (HQL)*Zum Unterschied vom JPQL und HQL haben Sie einen Blick auf die Kommentare.
Btw JPQL ist auf der Grundlage der Hibernate Query Language (HQL), eine frühere nicht-standard-Abfrage-Sprache, die in der Hibernate-Objekt-relationales mapping-Bibliothek.
Hibernate und HQL die erstellt wurden, bevor die JPA-Spezifikation. Ab Hibernate 3 JPQL ist eine Teilmenge von HQL. (Wikipedia)*
@NamedQuery
und@NamedNativeQuery
mindestens seit Hibernate core 3,2 + Hibernate Annotationen 3.3. Zu dieser Zeit war es defently HQL aber nicht JPQL. Aber das war vor langer Zeit, so dass ich aktualisiert meine Antwort ein wenig.JPA spec Staaten
damit Sie nicht BEITRETEN können in einer UPDATE-Anweisung. Nur so können Sie das update mit Hilfe von JOINs in SQL, und dann verlieren Sie die datastore-Unabhängigkeit, da nicht alle RDBMS-JOINs gibt es in der gleichen Weise