使用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
我得到:“非法尝试取消对集合的引用”。
更新值的正确方法是什么?
谢谢你的帮助!
第4章中的JPA 2.0规范包含JPQL中所有受支持功能的详细信息。这是“更新”语句的定义:
这些操作的语法如下:
update_statement ::= update_clause [where_clause] update_clause ::= UPDATE entity_name [[AS] identification_variable] SET update_item {, update_item}* update_item ::= [identification_variable.]{state_field | single_valued_object_field} = new_value new_value ::= scalar_expression | simple_entity_expression | NULL
如您所见,此处未说明对多个实体的支持。我猜您将不得不找到一种不同的方式来执行此操作,也许创建一个方法来选择要首先更新的实体,然后遍历设置值的结果。或者,您可以使用本机SQL更新。