2013-08-20 28 views
0

我想實現這樣的五月JPA /休眠/ MySQL的應用:JPQL:如果更新不存在

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。

回答

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演示

+0

@MihajloBrankovic有沒有幫助? – peterm

相關問題