将OptimisticLockPolicy更改为使用本地时间

时间:2017-12-27 19:08:38

标签: jpa eclipselink

我使用Eclipselink JPA,我有一个带有时间戳字段的实体,注释了@Version por optimistic locking。

默认情况下,这会将entitymanager设置为使用数据库时间,因此,如果我必须进行批量更新,那么每次想要插入时,它都会查询数据库的时间,因此无法正常工作。 / p>

如何更改TimestampLockingPolicy以使用LOCAL_TIME?

类org.eclipse.persistence.descriptors.TimestampLockingPolicy.class有一个公共方法useLocalTime()但我不知道如何使用,或者我应该从哪里调用它。

1 个答案:

答案 0 :(得分:1)

找到答案:

首先创建一个DescriptorCustomizer

public class LocalDateTimeCustomizer implements DescriptorCustomizer {
    @Override
    public void customize(ClassDescriptor descriptor) throws Exception {
        OptimisticLockingPolicy policy = descriptor.getOptimisticLockingPolicy();
        if (policy instanceof TimestampLockingPolicy) {
            TimestampLockingPolicy p = (TimestampLockingPolicy) policy;
            p.useLocalTime();
        }
    }
}

然后使用

注释具有@Version的实体
@Customizer(LocalDateTimeCustomizer.class)