我们有一个使用JPA和Eclipselink的Java EE应用程序。我们对所有实体使用乐观锁定。 我们的一个主要实体具有“lastConnected”属性,每当我们从客户端收到请求时,该属性都会更新。异步可能会对其他任何属性进行其他更新,因此有时会导致OptimisticLockException。
是否有可能在不增加实体版本字段的情况下更新“lastConnected”属性?我不关心我的“大”更新是否会覆盖“lastConnected”更改,因此不要让这个小更新导致OptimisticLockException。
当然可以将“lastConnected”属性移动到它自己的实体中,但我真的不喜欢这个解决方案。
答案 0 :(得分:0)
除非我误解你可以将@Version添加到lastConnected。
@Version
private Date lastConnected;
或者更好的方法是添加拦截器
public class MyInterceptor extends EmptyInterceptor {
private static final long serialVersionUID = 1L;
@Override
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) {
// here you have the current state and previous state so you can add logic here
return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types);
}
}
添加jpa属性
<prop key="hibernate.ejb.interceptor">com.greg.MyInterceptor</prop>