有关JPQL的教程和示例始终会处理SELECT语句,有时还会处理简单的UPDATE语句。我需要使用联接更新表。
我简化了我的环境:
KEY= ID-计数器
APPLET= ID! key_id(1-1)
DEVICE= ID! applet_id(1-1)! user_id(1-n)
USER= ID-登录
设备具有唯一的applet,该applet具有唯一的键集。但是用户可以拥有多个设备。
我需要重置与用户登录名“ x”关联的每个KEY的计数器。
我用UPDATE和JOIN尝试了一些语法,但没有成功。有什么线索吗?
谢谢。
您尝试了什么,遇到了什么错误?您的对象模型是什么?
也许类似,
Update Key k set k.counter = 0 where exists (Select u from User u join u.devices d where u.login = "x" and d.applet.key = k)
看,http://en.wikibooks.org/wiki/Java_Persistence/JPQL_BNF#Update
您还可以选择对象并重置内存中的计数器并提交更改。
JPQL不支持批量更新操作中的联接操作。当您编辑查询时,nativeQuery = true,您可以加入。
查询应根据数据库中的字段编写。
@Transactional
@Modifying
@Query(nativeQuery = true,
value = "UPDATE Team t" +
" SET current = :current " +
" FROM " +
" members," +
" account" +
" WHERE " +
" members.members_id = t.members_id " +
" AND members.account_id = :account " +
" AND t.current = :current_true ")
int updateTeam(
@Param("current") String current,
@Param("account") Long account,
@Param("current_true") Integer current_true);