首页 > Java > java教程 > 正文

为什么我的更新语句没有在 Spring Data JPA 中刷新?

Barbara Streisand
发布: 2024-10-26 13:54:30
原创
677 人浏览过

Why Are My Update Statements Not Flushing in Spring Data JPA?

更新语句未刷新?

Spring Data JPA 的 @Query 注解允许执行自定义查询。在提供的代码片段中,@Modifying 查询用于更新管理实体。但是,通过此查询所做的更改不会持久化到数据库中。

刷新的作用

默认情况下,EntityManager 不会自动刷新更改。这意味着通过 @Modifying 查询所做的更改只会反映在 EntityManager 的本地缓存中,但在显式刷新 EntityManager 之前它们不会持久化到数据库。

解决方案:强制刷新

为了确保通过 @Modifying 查询所做的更改持久保存到数据库中,请将clearAutomatically = true 选项添加到 @Modifying 注释中。这将强制 EntityManager 在每次写入操作后自动刷新更改,确保数据库立即更新。

修改的查询:

<code class="java">@Modifying(clearAutomatically = true)
@Transactional
@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);</code>
登录后复制

其他注意事项:

  • 使用事务管理:事务确保对数据库所做的更改是原子的且一致的。使用事务包围对 @Modifying 查询的调用,以确保更新成功保存。
  • 使用 Flush 方法: AndFlush 方法也可用于显式刷新对数据库的更改。在执行任何修改数据库的查询后可以使用此方法。

以上是为什么我的更新语句没有在 Spring Data JPA 中刷新?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板