gpt4 book ai didi

java - Hibernate LAZY Fetch VS 乐观锁版本

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

很抱歉,如果答案已经是回复,但我试图找出解决方案,但尚未找到任何明确的内容。

我的问题是,LAZY fetch 关系之间存在任何关系,我知道它们可以控制知道是否必须加入或不加入其他实体,或者如果它们在 session 上脏了,则从数据库进行初始化乐观锁原理VERSION?.

据我所知,如果我们必须同时处理多个事务,乐观锁定版本就更必要了。这是正确的吗?

如果我们在应用程序中执行的所有事务都是按顺序完成的,那么在必须完成 JOINS 时使用 LAZY fetch 来管理就足够了?或者添加版本给我们任何附加值。

谢谢!

最佳答案

它们是两个完全不同的概念。如果您获取或设置了延迟加载关系,则只会遇到“延迟加载”。

如果您使用乐观锁定并且您的行位于 V2 上,它只会阻止从一个客户端提交修改后的 V2(这会导致版本上升到 3),然后阻止从另一个客户端提交不同的 V2,从而强制它们重新加载数据并提交更高版本。

如果您的逻辑遇到了延迟加载的关系,然后又遇到了数千个其他关系并最终加载了数百万行,那么您将遇到性能问题,而不是版本控制问题。在这种情况下,您可能需要增加批量大小,或者可能需要进行一些获取连接,以确保您想要的任何内容都加载到一个 block 中,而不是数千个顺序 SQL 查询。

所以,问题空间完全不同。

如果您尝试更新一个非常复杂的对象图,并且您的更改深入到该图,您可能会遇到有趣的乐观锁定问题,因为确保整个树的“版本”相同是很困难的。

更新:澄清。

如果您有一辆汽车(具有单一属性,例如品牌、型号、注册号)和多个车轮。这将是 1:0..n 关系,表示为两个表,一个 Car 表和一个 Wheel 表,其中 Wheel 有一个返回 Car 的 FK。 (出于本文的目的,我们将忽略多对多关系)。

如果您延迟加载车轮,那么除非您对轮辋旋转器、轮胎、锁紧螺母等感兴趣,否则您永远不需要加载车轮记录,如果您只需要注册号,则它们不相关。

您的汽车记录为V1,车牌号为AB1212

如果我作为摩尔多瓦的车辆注册商将其更新为 AC4545 并使用 V1(当前版本)提交,我将成功并且版本号将增加。除非有必要,否则我不会开车。如果同时,另一个房间的 Subaltern 车辆注册器尝试在 V1 上执行相同的操作,它将再次失败并出现 StaleObjectException,不会撞击车轮,因此不会调用延迟加载。

关于java - Hibernate LAZY Fetch VS 乐观锁版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767237/

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