例如,而不是
@Modifying(flushAutomatically = true)
仅限
@Modifying
我确实理解它的要点-在查询之前将所有缓存刷新到DB,但是在我们编写@Query之后,JPQL查询不是已经被JPA处理了吗?而且JPA的默认Flushmode = AUTO,所以无论如何它都应该将数据刷新到db。
我想的对吗?如果是,我可以跳过这个注解吗?
附注:我还没有在stackoverflow上找到任何可以回答这个问题的东西,所以它不是重复的。
发布于 2021-07-24 13:23:51
正如在this thread中讨论的那样
@Modifying
注释具有clearAutomatically
属性,该属性定义在执行修改查询后是否应该清除底层持久性上下文。
..。
在激活此属性的情况下执行修改查询时,它会删除EntityManager
中所有仍挂起的未刷新的更改。
..。
是否可以向@Modifying
注释添加一个名为flushAutomatically
的新属性,以便在执行修改查询之前自动刷新对底层上下文的所有非持久化更改?
以及进一步的
SQL的AUTO
、FlushModeType
和Hibernate:如果当前执行的查询不会命中挂起的SQL INSERT/UPDATE/DELETE语句,那么刷新就不是必须的。
正如参考文档中所述,AUTO
刷新策略有时可能会在查询执行之前同步当前持久化上下文。
clearAutomatically
属性删除EntityManager中与当前更新查询无关的所有挂起的更改(因为它们不会自动刷新)。
这就是我请求一个新属性来强制EntityManager
刷新更改的原因。
因此,只有当您同时使用clearAutomatically
属性:@Modifying(clearAutomatically = true, flushAutomatically = true)
时,此属性才有意义。
https://stackoverflow.com/questions/68464200
复制相似问题