JPA- und Standardsperrmodus
Mit JPA, können wir manuell OPTIMISTIC
oder PESSIMISTIC
sperren, Griff Entität änderungen in Transaktionen.
Frage ich mich, wie JPA Griffe sperren, wenn wir nicht angeben, eine von diesen 2 Modi ?
Keine locking-Modus verwendet wird?
Wenn wir nicht definieren, eine explizite locking-Modus, kann die Integrität der Datenbank verloren?
Dank
InformationsquelleAutor der Frage Olivier J. | 2012-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich gescannt durch die in Abschnitt 3.4.4 Lock-Modi der Java Persistence API 2.0 Final Release Spezifikation und während ich konnte nicht finden, dass irgendetwas bestimmten (es macht keinen Staat, der diese wird die default oder etwas in der Art) gibt es eine Fußnote, die sagt Folgendes.
Ist der Abschnitt über die Arten von
LockModeType
Werte und deren Verwendungen und beschreibt, mit welchen Methoden nimmt ein argument dieser Art und so weiter.So, wie es gesagt
LockModeType.NONE
ist Standard-Annotationen (JPA, Anmerkungen, Links und rechts) ich glaube, wenn SieEntityManager.find(Class, Object)
die Standard -LockModeType
verwendet wird.Gibt es einige andere, subtile, Hinweise zu verstärken. Abschnitt 3.1.1 EntityManager interface.
Macht es Sinn. Zum Beispiel, wenn Sie die Verwendung von MySQL als Datenbank und die Datenbank-engine der Wahl ist die InnoDB dann (standardmäßig) Ihre Tabellen verwenden
REPEATABLE READ
, wenn Sie mit einem anderen RDBMS-oder anderen Datenbank-Engine, die dies ändern könnte.Recht, ich bin mir jetzt nicht genau sicher, isolation levels hat nichts zu tun mit JPA lock-Modi (obwohl es so scheint), aber mein Punkt ist, dass verschiedene Datenbank-Systeme unterscheiden sich also JPA kann nicht für Sie entscheiden (zumindest laut Spezifikation), was lock-Modus standardmäßig verwendet werden, so dass Sie verwenden
LockModeType.NONE
wenn Sie nicht beauftragen, sonst.Habe ich auch gefunden ein Artikel über den isolation Level und lock-Modi, möchten Sie vielleicht, um es zu Lesen.
Oh, und um die Antwort auf Ihre Letzte Frage.
Es hängt, aber wenn Sie gleichzeitige Transaktionen, dann ist die Antwort wohl ja.
InformationsquelleAutor der Antwort Kohányi Róbert
Durch JPA 2.1 FR
Also, wenn die Person ist eine versionierte Objekt, wie z.B. ein @Version angegeben wurde, dann wird der Standard-Persistenz-provider durchführen wird das optimistische sperren.
InformationsquelleAutor der Antwort Barry Zhong
In der Spezifikation persistence_2.0, Seite 89:
InformationsquelleAutor der Antwort Mehmet Erdemsoy
Form die Antworten, die bisher hier eingereicht, wie es scheint, JPA verhält sich auf folgende Weise: Wenn meine Einheit hat ein @Version annotiertes Feld ein no LockModeType gesetzt wurde, dann LockModeType.OPTIMISTIC_FORCE_INCREMENT wird standardmäßig festgelegt. Ist das richtig ?
InformationsquelleAutor der Antwort Chris