0

我试图在可能的 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。

4

1 回答 1

0

一种方法是把它变成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演示

于 2013-08-20T19:58:28.717 回答