java - 使用 join 更新值

标签 java hibernate jpa jpql

使用 Hibernate,我想根据条件更新数据库中的数据,但出现以下错误:“要遍历的节点不能为空”

这是我的数据库描述:

Account: id, email, password
Member : id, account, team
Team: id, current (and a reference to member => members)

这是我的 JPA:

UPDATE Team t SET t.current = :current LEFT JOIN t.members m WHERE t.current = :current_true AND m.account = :account

我做错了什么? 如果我将 LEFT JOIN 移动到 SET 之前:

UPDATE Team t LEFT JOIN t.members m SET t.current = :current WHERE t.current = :current_true AND m.account = :account

我得到:“期待 SET,找到 LEFT”

如果我删除连接:

UPDATE Team t SET t.current = :current WHERE t.current = :current_true AND t.members.account = :account

我得到:“非法尝试取消引用集合”。

更新值的正确方法是什么?

感谢您的帮助!

最佳答案

使用子查询:

(未测试)

UPDATE Team t SET t.current = :current 
WHERE t.id in (select t1.id from Team t1  LEFT JOIN t1.members m WHERE t1.current = :current_true AND m.account = :account)

关于java - 使用 join 更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201895/

相关文章:

java - JPA:查找所有具有一组通用标签的文章

java - 将 Spring Boot fat jar 拆分为两个 jar (app/libs)

java - JPA双向@ManyToMany关系: Assignment causes two inserts

java.lang.NoClassDefFoundError : javax/servlet/ServletContextListener error

java - 为什么 Hazelcast 在 CleanupService.registerCache 处具有固定的清理缓存延迟(60 秒)

java - ServletContextListener 调度程序执行任务 - 然后停止 EJB 方法调用以持久保存到 JBOSS 7.1 中的数据库中

java - 如何在listView中初始化项目总数和某些价格的总值(value)?

java - 比较目录以检查一个目录是否是另一个目录的子目录

java - Java 中的标志类

exception - javax.persistence.PersistenceException : Unable to build entity manager factory