使用乐观锁定更新对象而不增加版本

时间:2016-02-18 08:08:07

标签: java jpa eclipselink

我们有一个使用JPA和Eclipselink的Java EE应用程序。我们对所有实体使用乐观锁定。 我们的一个主要实体具有“lastConnected”属性,每当我们从客户端收到请求时,该属性都会更新。异步可能会对其他任何属性进行其他更新,因此有时会导致OptimisticLockException。

是否有可能在不增加实体版本字段的情况下更新“lastConnected”属性?我不关心我的“大”更新是否会覆盖“lastConnected”更改,因此不要让这个小更新导致OptimisticLockException。

当然可以将“lastConnected”属性移动到它自己的实体中,但我真的不喜欢这个解决方案。

1 个答案:

答案 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>