簡體   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