2017-12-27 1524 views
0

我正在使用Eclipselink JPA,我有一个带有@Version和乐观锁定注解的时间戳字段的实体。将OptimisticLockPolicy更改为使用本地时间

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

如何更改TimestampLockingPolicy以使用LOCAL_TIME?

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

回答

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(); 
     } 
    } 
} 

则标注具有与

@Customizer(LocalDateTimeCustomizer.class) 
的@Version实体
相关问题