6
我是JPA的新手,如果不清楚,請原諒我。如何處理javax.persistence.OptimisticLockException?
基本上我想通過使用樂觀鎖定來防止併發修改。 我已將@Version屬性添加到我的實體類中。
我需要知道處理OptimisticLockException的這個算法是否合理。 我將使用Execute Around Idiom像這樣:
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();
}
}
我已經是你如何決定的問題何時停止重試?