JPA: OptimisticLockException und Cascading

In meinem aktuellen Projekt verwende ich Spring Data JPA mit Hibernate, aber betrachten Sie dies als eine mehr Allgemeine Frage, die sollte auch für "normale" JPA.

Ich bin unsicher, wie ich damit umgehen soll OptimisticLockException bei der Verwendung @Version.

Daran, wie mein Programm arbeitet einige Beziehungen haben CascadeType.PERSIST und CascadeType.REFRESH, andere haben auch CascadeType.MERGE.

  1. Wo zu behandeln OptimisticLockException

Soweit ich sagen kann der Umgang mit diesem auf dem service-layer wird nicht funktionieren, vor allem mit CascadeType.MERGE da dann der säumige Person könnte einer sein, der verarbeitet werden muss, die von einem anderen Dienst ( ich habe einen service pro entity-Klasse).

Problem ist, ich bin ein framework erstellen, und daher gibt es keine Ebene darüber-Dienst, so konnte ich nur ein "delegieren" Sie diese, um den Benutzer über meinem Rahmen, aber das scheint "zu schwach und faul".

  1. Ermitteln säumige Person und Felder, die geändert

wenn ein OptimisticLockException Auftritt, wie bekomme ich die Entität, die das Problem verursacht hat und welche Felder wurden geändert?

Ja, ich kann anrufen getEntity() aber wie kann ich die Besetzung, um den richtigen Typ vor allem, wenn CascadeType.MERGE verwendet wurde? Die Person konnte mit mehreren Typen, so ein if/switch mit instanceof den Sinn kommt, aber das scheint hässlich wie die Hölle.

Sobald ich die korrekte Art würde ich brauchen, um alle Unterschiede zwischen den Versionen (mit Ausnahme bestimmter Bereiche wie die version selbst oder lastModifiedDate.

In meinem Hinterkopf ist auch HTTP 409 die besagt, dass im Falle eines Konflikts Antwort enthalten sollte, die Konflikt Felder.

Gibt es ein "best-practice-Muster" für all dies?

InformationsquelleAutor beginner_ | 2013-04-18
Schreibe einen Kommentar