关于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具有唯一的键集。但是用户可以拥有多个设备。
我需要重置连接到USER登录名“x”的每个KEY的计数器。
我尝试了UPDATE和JOIN的一些语法,没有成功。任何线索?
谢谢。
答案 0 :(得分:7)
你尝试了什么,你得到了什么错误?你的对象模型是什么?
也许是这样的,
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
您也可以选择对象并在内存中重置计数器并提交更改。
答案 1 :(得分:0)
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);