gpt4 book ai didi

java - 事务是否收集对数据库的查询或锁定数据库直到提交?

转载 作者:行者123 更新时间:2023-12-02 08:26:12 24 4
gpt4 key购买 nike

假设这段 Hiberante 代码片段:

session.beginTransaction();
Event event1 = session.load(1);
Event event2 = new Event(2);
event2.setNextEvent(event1);
event2.save();
session.getTransaction().commit();

我的问题是,这是否按预期工作?也就是说,我可以从数据库中读取某些内容,将其设置到另一个实体上,然后在单个事务中将该实体保存到数据库中吗?

换句话说,开始事务是否意味着“我将收集对数据库的所有查询,并保留它们,直到您告诉我提交它们”。 orr 真的只是意味着锁定而提交意味着解锁吗?

最佳答案

我已经读了你的例子好几遍了,但我不明白你在说什么。代码中没有任何更改或提交,也没有指示哪些内容正在等待提交,哪些内容没有。如果此代码位于使用 ORM(例如 hibernate)的典型系统中,那么我认为它不会有任何问题。

假设a尚未提交到数据库,那么dao.findBar(a)仍会返回它,因为它位于hibernates缓存中。假设它首先与 hibernate session 相关联。

dao.findBar(a) 应该返回 x,前提是它符合与 a 相同的条件。即它已经存在或已与 hibernate session 关联。

因此,dao.findBar(x.getBaz()) 也应该在假设相同类型的东西的情况下工作。

正如你所看到的,上面的陈述中有很多“大概”的内容。我怀疑如果没有更清晰的问题,您是否会得到更好的答案。

更复杂的是,你的问题没有提到 ORM,但你在评论中谈论了它们。因此我的评论假设是这种情况。如果您没有使用 ORM 并且您的 dao 直接通过 JDBC 访问数据库,那么答案将再次完全不同 - 取决于 dao 的内部编码。

关于java - 事务是否收集对数据库的查询或锁定数据库直到提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486460/

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