首页  >  文章  >  Java  >  为什么我的 Spring Data JPA @Query 更新没有反映在数据库中?

为什么我的 Spring Data JPA @Query 更新没有反映在数据库中?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-25 12:34:30259浏览

Why is my Spring Data JPA @Query Update Not Reflecting in the Database?

Spring Data JPA 更新 @Query 未更新?

在 Spring Data JPA 中,@Query 注解允许您定义自定义 JPQL 或本机用于修改数据库行的 SQL 查询。然而,单独的 @Modifying 注解可能不会触发更新数据库所需的刷新和持久化操作。

为了确保更改持久保存到数据库,建议在 @Modifying 注解中使用clearAutomatically 属性。该属性决定执行查询后是否自动清除持久化上下文。通过将clearAutomatically设置为true,将自动检测查询执行期间所做的更改并将其刷新到数据库。

以下是如何在@Modifying查询中使用clearAutomatically的示例:

@Modifying(clearAutomatically = true)
@Query("UPDATE Admin SET firstname = :firstname, lastname = :lastname, login = :login, superAdmin = :superAdmin, preferenceAdmin = :preferenceAdmin, address =  :address, zipCode = :zipCode, city = :city, country = :country, email = :email, profile = :profile, postLoginUrl = :postLoginUrl WHERE id = :id")
public void update(@Param("firstname") String firstname, @Param("lastname") String lastname, @Param("login") String login, @Param("superAdmin") boolean superAdmin, @Param("preferenceAdmin") boolean preferenceAdmin, @Param("address") String address, @Param("zipCode") String zipCode, @Param("city") String city, @Param("country") String country, @Param("email") String email, @Param("profile") String profile, @Param("postLoginUrl") String postLoginUrl, @Param("id") Long id);

通过将clearAutomatically设置为true,在执行更新查询后将清除持久化上下文。这会强制对 Admin 对象所做的更改持久化到数据库中。

请记住,clearAutomatically 仅影响与当前 EntityManager 关联的持久化上下文。如果您使用多个持久性上下文,您可能需要手动管理刷新,以确保更改在所有上下文之间正确同步。

以上是为什么我的 Spring Data JPA @Query 更新没有反映在数据库中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn