【问题标题】:JPQL: Update if not existsJPQL:如果不存在则更新
【发布时间】:2013-08-23 00:13:24
【问题描述】:

我正在尝试在 JPA/Hibernate/MySQL 应用程序中实现类似的功能:

UPDATE UserRating ur SET ur.item = :newItem WHERE ur.item = :oldItem AND NOT EXISTS (SELECT ur2 FROM UserRating ur2 WHERE ur.user = ur2.user AND ur2.item = :newItem)

所以,我只想更新一些唯一的行(用户/项目组合必须是唯一的)。

我来了

Caused by: java.sql.SQLException: You can't specify target table 'user_rating' for update in FROM clause

使用当前的 JPQL。

【问题讨论】:

    标签: mysql hibernate sql-update jpql


    【解决方案1】:

    一种方法是把它变成JOIN

    UPDATE UserRating r JOIN
    (  
      SELECT user, item 
        FROM UserRating ur
       WHERE item = :oldItem 
         AND NOT EXISTS 
      (
        SELECT * 
         FROM UserRating 
        WHERE user = ur.user 
          AND item = :newItem
      )
    ) q ON r.user = q.user 
       AND r.item = q.item
       SET r.item = :newItem
    

    这里是SQLFiddle演示

    【讨论】:

    • @MihajloBrankovic 有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2019-08-20
    • 2019-10-17
    • 2012-12-13
    相关资源
    最近更新 更多