【问题标题】:How to update 3 tables using one query in JPA?如何在 JPA 中使用一个查询更新 3 个表?
【发布时间】:2016-10-02 07:47:56
【问题描述】:

我有 3 个表 UserDetail、RequestorDetail 和 AddressDetail。 UserDetail 有 userId(PK)、userName、AddressDetail 有城市和郊区,RequestorDetail 有 reqEmail 和 reqPhone。

我想使用一个查询更新所有这些详细信息。截至目前,我正在使用 3 个不同的查询,如下所示。

@Modifying
    @Query("update UserDetail u set "u.userName = :userName, u.password = :password where u.userEmailId = :userEmailId")
    int saveUserDetailData(@Param("userName") String userName, @Param("password") String password,  @Param("userEmailId") String userEmailId);

@Modifying
    @Query("update RequestorDetail r set r.requestorEmailid = :requestorEmailid, r.requestorPhone = :requestorPhone where r.userId = :userId")
    int saveRequestorDetailData(@Param("requestorEmailid") String requestorEmailid,
            @Param("requestorPhone") String requestorPhone, @Param("userId") int userId);

@Modifying
    @Query("update AddressDetail a set a.city = :city, a.suburb = :suburb where a.userId = :userId")
    int saveAddressDetailData(@Param("city") String city, @Param("suburb") String suburb,
            @Param("userId") int userId);

谁能告诉我如何在单个查询中使用所有这些?

【问题讨论】:

  • 您是否有特定原因需要只使用一个查询?我问是因为在 SQL(JPA 所基于的)中,您不能同时更新多个表。您需要做的是使用一个事务来执行所有 3 个查询,并且仅在三个查询执行后才提交。
  • 你能告诉我如何使用交易吗?我搜索了相同的内容,但我没有清楚的想法。可以举个例子吗?
  • 对不起,我不使用JPA,我不知道如何精确地打开一个事务或在其中执行一个查询。你平时是怎么做的?

标签: mysql jpa spring-data


【解决方案1】:

单个 sql 查询无法更新多个表。 见https://community.oracle.com/thread/2225393

您必须将其拆分为不同的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多