我正在尝试在 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。
最佳答案
一种方法是将其变成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 演示
关于mysql - JPQL:如果不存在则更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343607/