Java 在不访问hibernate会话的情况下从org.hibernate.StaleObjectStateException恢复

Java 在不访问hibernate会话的情况下从org.hibernate.StaleObjectStateException恢复,java,spring,hibernate,session,Java,Spring,Hibernate,Session,我有一种情况,一个以上的线程可以修改同一个对象(它们修改不同的字段,所以这不是问题)。我检测到以下方法可能存在问题: Contact contact = someService.getMeAContactSomeHow(..); try { //force hibernate to initialize contact's collections Hibernate.initialize(contact); } catch (StaleObjectStateException e) {

我有一种情况,一个以上的线程可以修改同一个对象(它们修改不同的字段,所以这不是问题)。我检测到以下方法可能存在问题:

Contact contact = someService.getMeAContactSomeHow(..);

try {
  //force hibernate to initialize contact's collections
  Hibernate.initialize(contact);
} catch (StaleObjectStateException e) {
  session.evict(contact);
  //reload the contact object with up to date version property
  contact = contactDao.get(contact.getId());
}

//continue working with contact as nothing has happened.
但是如果我不能访问hibernate会话,我就不能使用这种方法。例如,我正在控制器的助手类中处理contact对象(该类基本上不应该访问hibernate会话)


如何在不访问Hibernate会话的情况下复制相同的行为?

修改不同线程中的实体是一个问题。更改hibernate中非线程安全的触发器代码。如果没有同步,则无法保证您的更改何时以及是否会进入数据库。如果您有权访问
会话
,是否确实可以使用此方法事件?
StaleObjectStateException
是否可恢复,捕获事务后是否能够提交该事务?