繁体   English   中英

EclipseLink 中的批量乐观锁定查询

[英]Batch optimistic locking queries in EclipseLink

我们有一个包含 JPA 实体的代码库,每个实体都有一个用@Version注释的long字段。 在事务过程中,使用entityManager.lock(entity, LockModeType.OPTIMISTIC)在某些实体上获取乐观锁,因此当事务提交时 EclipseLink 运行以下形式的查询:

UPDATE <table> SET VERSION = <x> where ((ID = <y>) AND (VERSION = <x>));

其中y是实体的 ID, x是当前版本号(它不会更新)。 但是,出于某种原因,它单独运行每个查询,就像这样(来自 MySQL 日志):

UPDATE TableA SET VERSION = 5 WHERE ((ID = 1) AND (VERSION = 5));
UPDATE TableA SET VERSION = 4 WHERE ((ID = 2) AND (VERSION = 4));
UPDATE TableA SET VERSION = 3 WHERE ((ID = 3) AND (VERSION = 3));
UPDATE TableA SET VERSION = 2 WHERE ((ID = 4) AND (VERSION = 2));
UPDATE TableA SET VERSION = 1 WHERE ((ID = 5) AND (VERSION = 1));
-- etc

而我们希望对同一张表的所有查询都集中到一个UPDATE

我们需要在某处设置一些标志来启用它吗? 一个典型的事务可以为同一个表生成数百个这样的查询。

批量写入是使用“eclipselink.jdbc.batch-writing”持久性属性配置的。 但是,您可能仍然无法更改乐观锁语句,因为它取决于您的驱动程序和 EclipseLink DB 平台类:如果存在问题,代码需要确定哪个语句失败,以便它可以指示哪个对象参与了抛出 OptimisticLockException。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM