我正在开发一个带有底层Spring和Hibernate应用程序的appfuse项目。我的应用程序有一个页面,它会获得大量的并发命中。我在控制器类中有一个方法,它使用DAO来执行底层操作。
我有一个方法 - 如下所示,
@Transactional
private void fetchHistoryRows(){
callFirstmethod();
callSecondMethod();
callThirdMethod();
callFourthMethod();
callFifthMethod();
callSixthMethod();
}
fetchHistoryRows()
中使用的所有六种方法都是使用命名查询的数据库读取操作。并且所有方法都标有@Transactional
。
我继续在其中一种方法中专门针对命名查询获取org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
。
查询也如下,
select distinct h from History h where h.url = :url and h.id <> :id and h.term = :term order by h.updatedDate desc
我不确定导致StaleObjectStateException的原因是什么,这里出了什么问题?避免这种并发问题的任何提示都会非常有用和有用