繁体   English   中英

JPQL查询中的性能改进以更新同一张表

[英]Performance improvement in JPQL Query for update same table

我想使用jpql更新表格。 表结构和条件以及查询如下。

-------------------------------------------------------------
ASSIGNMENT | BUSINESS_AREA | DC_CURRENCY | DC_AMOUNT | STATUS
-------------------------------------------------------------

在上面的表结构中,我想将所有行的状态更新为已完成,其中DC_AMOUNT的总和为零,DC_CURRENCY的所有行均相同,并且ASSIGNMENT也相同

我的方法

  1. 通过查询在Java层中获取所有分配编号
  2. 我在上一个结果集中获得的所有分配编号的状态更新为已完成

查询以获得所有分配编号满足条件

SELECT 
    q.assignment 
FROM 
    OnAccoutEntity q, OnAccoutEntity r 
WHERE 
    q.assignment = r.assignmet 
    AND q.dcCurrency = r.dcCurrency 
    AND q.businessArea = r.businessArea 
GROUP BY 
    q.assignmnt 
HAVING 
    SUM(q.dcAmount) = 0

UPDATE OnAccoutEntity p
SET p.status = 'COMPETED'
WHERE p.assignment IN ("Result of previous query' )

如果我使用单个查询来更新它给出异常。

java.sql.SQLException:您不能在form子句中指定目标“ ONACCCOUNT”进行更新。

请提出一个更好的方法,因为这很耗时。

它应该与EXISTS一起使用,

UPDATE
   OnAccoutEntity o
SET
   o.status = 'COMPLETED'
WHERE
   EXISTS (SELECT
              q.assignment
           FROM
              OnAccoutEntity q
           WHERE
              o.assignment = q.assignment
           AND
              q.dcCurrency = o.dcCurrency
           AND
              q.businessArea = r.businessArea
           GROUP BY
              q.assignment
           HAVING SUM(q.dcAmount) = 0)

暂无
暂无

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

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