mysql - JPQL:如果不存在则更新

标签 mysql hibernate sql-update jpql

我正在尝试在 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/

相关文章:

java - JPA ManyToOne 字段未存储

mysql - 将选择查询转换为更新查询 - 对每组的行进行编号

java - 我收到异常 org.hibernate.MappingException : No Dialect mapping for JDBC type: -9

mysql - MySQL 中的外键约束错误 1452 - Magento 导入

sql - 简单的 C 库访问 MySQL

mysql - 使用一张 table 订购另一张 table

java - 使用 hibernate 连接数据库时出错

mysql - phpMyAdmin 中的更新语句不起作用

mysql - MySQL如何拆分字段数据中的字符串

mysql - 在VB.Net中计算MysQl的日期列?