Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate惰性获取与乐观锁定版本_Java_Spring_Hibernate - Fatal编程技术网

Java Hibernate惰性获取与乐观锁定版本

Java Hibernate惰性获取与乐观锁定版本,java,spring,hibernate,Java,Spring,Hibernate,很抱歉,如果答案已经是回应,但我试图找出解决方案,但我无法找到任何明确的 我的问题是,延迟获取关系之间存在任何关系,我知道它们有权根据乐观锁定版本的原则,知道是否必须加入其他实体,或者是否必须从数据库中初始化(如果它们在会话中是脏的) 据我所知,如果我们必须同时处理多个事务,乐观锁定版本更为必要。对吗 如果我们在应用程序中执行的所有事务都是按顺序完成的,那么使用延迟获取来管理何时必须执行连接就足够了?。或添加版本给我们带来任何附加值 谢谢 如果LazyInitializationExceptio

很抱歉,如果答案已经是回应,但我试图找出解决方案,但我无法找到任何明确的

我的问题是,延迟获取关系之间存在任何关系,我知道它们有权根据乐观锁定版本的原则,知道是否必须加入其他实体,或者是否必须从数据库中初始化(如果它们在会话中是脏的)

据我所知,如果我们必须同时处理多个事务,乐观锁定版本更为必要。对吗

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


谢谢

如果LazyInitializationException尝试使用乐观锁定获取由不同事务(如果发生)更改的数据,则lazyFetch代理将抛出LazyInitializationException

没有任何代码或好的问题都很难提供帮助,但只要您将所有初始化保持在
@Transactional
代码块中,您就会遇到很多麻烦

也就是说,您正在尝试比较两个(功能上)非常不同的东西


希望这能有所帮助。

它们是两个完全不同的概念。只有在获得或设置了一个延迟加载的关系时,您才会遇到“延迟加载”

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

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

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

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

更新:请澄清

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

如果你懒散地装载你的车轮,那么除非你有兴趣,如果你有轮辋纺纱机,轮胎,锁紧螺母等,你永远不需要装载车轮记录,如果你只需要注册号,它们是不相关的

你的汽车记录在V1上,它的注册号是AB1212


如果我作为摩尔多瓦的车辆登记官将其更新为AC4545并随V1(当前版本)提交,我将成功,版本号将增加。除非我需要,否则我不会开车。如果同时,另一个房间的下级车辆登记员尝试在V1上执行相同的操作,它将失败,再次出现StaleObjectException,不会撞到车轮,因此不会调用惰性负载。

但是,如果我理解你所说的,如果我所有的关系都是懒惰的,那么乐观锁定是多余的,对吗?。“另一个房间里的下级车辆登记员”是另一个事务,对吗?但正如我在我的案例中所解释的,没有并发事务,所以这个问题永远不可能发生,所以乐观锁定是多余的。如果我继续遗漏某些内容,请原谅:)