使用JPQL更新和加入

问题描述 投票:2回答:2

有关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尝试了一些语法,但没有成功。有什么线索吗?

谢谢。

jpa join jpql
2个回答
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

您还可以选择对象并重置内存中的计数器并提交更改。


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);
© www.soinside.com 2019 - 2024. All rights reserved.