Ich bin neu bei JPA, also vergib mir, wenn ich nicht klar bin.Wie sollte man eine javax.persistence.OptimisticLockException behandeln?
Grundsätzlich möchte ich gleichzeitige Änderungen verhindern, indem Sie optimistisches Sperren verwenden. Ich habe das Attribut @Version zu meiner Entitätsklasse hinzugefügt.
Ich muss wissen, ob dieser Algorithmus bei der Handhabung von OptimisticLockException Sound ist. Ich werde die Execute Around Idiom wie so verwenden:
interface UpdateUnitOfWork
{
doUpdate(User user); /* may throw javax.persistence.PersistenceException */
}
public boolean exec(EntityManager em, String userid, UpdateUnitOfWork work)
{
User u = em.find(User, userid);
if(u == null)
return;
try
{
work.doUpdate(u);
return true;
}
catch(OptimisticLockException ole)
{
return false;
}
}
public static void main(..) throws Exception
{
EntityManagerFactory emf = ...;
EntityManager em = null;
try
{
em = emf.createEntityManager();
UpdateUnitOfWork uow = new UpdateUnitOfWork() {
public doUpdate(User user)
{
user.setAge(34);
}
};
boolean success = exec(em, "petit", uow);
if(success)
return;
// retry 2nd time
success = exec(em, "petit", uow);
if(success)
return;
// retry 3rd time
success = exec(em, "petit", uow);
if(success)
return;
}
finally
{
em.close();
}
}
Die Frage, die ich habe, ist, wie Sie sich entscheiden, wenn erneut versucht zu stoppen?