gpt4 book ai didi

java - 默认的@Transactional在底层是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 05:54:24 26 4
gpt4 key购买 nike

传播所需的默认 @Transactional 是否会收集所有查询并在方法末尾完全执行它们,还是打开一个数据库事务并执行 BEGIN,它找到的每个查询以及事务完成时执行 COMMIT?

这就是所谓的逻辑交易与物理交易吗?

我想知道,因为我使用 @Transactional 测试来执行 GET 端点 + DELETE 端点 + READ_UNCOMMITED 的 GET 端点,所以行为能够很好地工作,但我在日志中没有看到删除查询的痕迹,只有选择。

我本希望看到发出的所有查询,然后回滚,但我感觉事务只是修改持久性上下文的托管实体,并且只是尝试在测试结束时保存...

如果我应该在执行repository.removes()时看到所有删除查询,那么可能由于某种原因hibernate仅将查询记录在readonly = false事务中

最佳答案

也许这个答案对您有帮助:JPA flush vs commit

如果存在 Activity 事务,JPA/Hibernate 将在提交事务时执行刷新方法。同时,应用于实体的所有更改都收集在 Unit of Work 中。 .

In flush() the changes to the data are reflected in database after encountering flush, but it is still in transaction.flush() MUST be enclosed in a transaction context and you don't have to do it explicitly unless needed (in rare cases), when EntityTransaction.commit() does that for you.

您可以通过更改刷新策略来更改此行为。

关于java - 默认的@Transactional在底层是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422349/

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