Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EclipseLink中的批处理乐观锁定查询_Java_Mysql_Jpa_Eclipselink_Optimistic Locking - Fatal编程技术网

Java EclipseLink中的批处理乐观锁定查询

Java EclipseLink中的批处理乐观锁定查询,java,mysql,jpa,eclipselink,optimistic-locking,Java,Mysql,Jpa,Eclipselink,Optimistic Locking,我们有一个JPA实体的代码库,每个JPA实体都有一个long字段,用@Version注释。在事务过程中,使用entityManager.lock(entity,LockModeType.optimistic)在某些实体上获取乐观锁,因此当事务提交EclipseLink时,会运行以下形式的查询: UPDATE <table> SET VERSION = <x> where ((ID = <y>) AND (VERSION = <x>)); 然而,我

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

UPDATE <table> SET VERSION = <x> where ((ID = <y>) AND (VERSION = <x>));
然而,我们希望对同一个表的所有查询都被批处理成一个
UPDATE


是否需要在某个地方设置一些标志来启用此功能?一个典型的事务可以为同一个表生成数百个这样的查询。

批写入是使用persistence属性配置的。但是,您可能仍然无法使用此命令来更改乐观锁语句,因为这取决于您的驱动程序和EclipseLink DB平台类:如果出现问题,代码需要确定哪个语句失败,以便它可以指示抛出的乐观锁异常涉及到哪个对象。

是的,我们已经配置了此命令。我担心你可能是对的,因为没有办法批量处理乐观锁定语句。
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