gpt4 book ai didi

jpa - 为什么在查询期间会调用 JPA @PreUpdate-annotated 方法?

转载 作者:行者123 更新时间:2023-12-03 20:47:51 26 4
gpt4 key购买 nike

我有一个返回 Collection 的命名查询的实体。

这些实体具有 @PreUpdate -对它们进行注释的方法。此方法在 query.getResultList() 期间调用。 .正因为如此,实体在持久性上下文中发生了变化,这意味着在事务提交时,实体被写回数据库。

为什么是这样? JPA 2.0 规范没有明确提到 @PreUpdate应该由查询执行调用。

最佳答案

规范说:

The PreUpdate and PostUpdate callbacks occur before and after the database update operations to entity data respectively. These database operations may occur at the time the entity state is updated or they may occur at the time state is flushed to the database (which may be at the end of the transaction).



在这种情况下调用 query.getResultList()触发 em.flush()以便查询可以包括从当前 EntityManager session 中更改的内容。 em.flush()将所有更改推送到数据库(进行所有 UPDATE、INSERT 调用)。之前 UPDATE通过 JDBC @PreUpdate 发送相应的钩子(Hook)被调用。

关于jpa - 为什么在查询期间会调用 JPA @PreUpdate-annotated 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12097485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com