Ich habe mehrere gemappte Objekte in meiner JPA/Hibernate-Anwendung. Im Netzwerk erhalte ich Pakete, die Updates für diese Objekte darstellen, oder sie können tatsächlich neue Objekte darstellen.JPA - create-wenn-nicht-existiert-Einheit?
Ich möchte eine Methode, wie
<T> T getOrCreate(Class<T> klass, Object primaryKey)
schreiben, die ein Objekt der bereitgestellten Klasse zurückgibt, wenn man in der Datenbank mit pk primaryKey existiert, und erzeugt sonst ein neues Objekt dieser Klasse, bleibt es und gibt es zurück.
Die nächste Sache, die ich mit dem Objekt tun werde, wird sein, alle seine Felder innerhalb einer Transaktion zu aktualisieren.
Gibt es einen idiomatischen Weg, dies in JPA zu tun, oder gibt es einen besseren Weg, um mein Problem zu lösen?
Beachten Sie, dass dies wahrscheinlich nicht in mehreren Threads, wenn laufen arbeiten, da es eine Race-Bedingung in den Schritten 3) -7. – sleske
und wie man dieses Problem in mehreren Threads überwinden? –
@sleske Die Schritte 3-7 sind in die Transaktion eingebettet. Dieser Ansatz hilft, "Race Condition" zu verhindern -> http://stackoverflow.com/questions/6477574/do-database-transactions-prevent-race-conditions –