首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在修改注解时跳过编写flushAutomatically=true吗?

我可以在修改注解时跳过编写flushAutomatically=true吗?
EN

Stack Overflow用户
提问于 2021-07-21 13:00:17
回答 1查看 73关注 0票数 1

例如,而不是

代码语言:javascript
运行
复制
@Modifying(flushAutomatically = true)

仅限

代码语言:javascript
运行
复制
@Modifying

我确实理解它的要点-在查询之前将所有缓存刷新到DB,但是在我们编写@Query之后,JPQL查询不是已经被JPA处理了吗?而且JPA的默认Flushmode = AUTO,所以无论如何它都应该将数据刷新到db。

我想的对吗?如果是,我可以跳过这个注解吗?

附注:我还没有在stackoverflow上找到任何可以回答这个问题的东西,所以它不是重复的。

EN

回答 1

Stack Overflow用户

发布于 2021-07-24 21:23:51

正如在this thread中讨论的那样

@Modifying注释具有clearAutomatically属性,该属性定义在执行修改查询后是否应该清除底层持久性上下文。

..。

在激活此属性的情况下执行修改查询时,它会删除EntityManager中所有仍挂起的未刷新的更改。

..。

是否可以向@Modifying注释添加一个名为flushAutomatically的新属性,以便在执行修改查询之前自动刷新对底层上下文的所有非持久化更改?

以及进一步的

SQL的AUTOFlushModeType和Hibernate:如果当前执行的查询不会命中挂起的SQL INSERT/UPDATE/DELETE语句,那么刷新就不是必须的。

正如参考文档中所述,AUTO刷新策略有时可能会在查询执行之前同步当前持久化上下文。

clearAutomatically属性删除EntityManager中与当前更新查询无关的所有挂起的更改(因为它们不会自动刷新)。

这就是我请求一个新属性来强制EntityManager刷新更改的原因。

因此,只有当您同时使用clearAutomatically属性:@Modifying(clearAutomatically = true, flushAutomatically = true)时,此属性才有意义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68464200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档