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中文网其他相关文章!