Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 冬眠+;奥西夫。2项交易。可重复读取_Java_Hibernate_Session_Transactions_Lazy Evaluation - Fatal编程技术网

Java 冬眠+;奥西夫。2项交易。可重复读取

Java 冬眠+;奥西夫。2项交易。可重复读取,java,hibernate,session,transactions,lazy-evaluation,Java,Hibernate,Session,Transactions,Lazy Evaluation,文章指出,如果我们使用两个事务,一个用于获取第一个数据,另一个用于获取延迟字段,我们将不会遇到任何问题,因为会话是重用的,并且会话本身保证了可重复读取。但这似乎是不可能的,会话看起来只有在涉及到缓存中已有的数据时才能满足可重复读取的要求。但是,如果对象及其底层的惰性OTO被删除了呢?我理解,对于集合,它可能不会导致问题,它只会返回空集合。但是奥托getChildField()将返回代理(因为OTO配置了restricted=true),但它不应该这样做,因为所有内容都已为null。有人有答案吗

文章指出,如果我们使用两个事务,一个用于获取第一个数据,另一个用于获取延迟字段,我们将不会遇到任何问题,因为会话是重用的,并且会话本身保证了可重复读取。但这似乎是不可能的,会话看起来只有在涉及到缓存中已有的数据时才能满足可重复读取的要求。但是,如果对象及其底层的惰性OTO被删除了呢?我理解,对于集合,它可能不会导致问题,它只会返回空集合。但是奥托
getChildField()
将返回代理(因为OTO配置了
restricted=true
),但它不应该这样做,因为所有内容都已为null。有人有答案吗

这篇文章说的是:跨多个事务按需加载对象是不可靠的:

这个问题的解决方案当然是适当的工作单元 标界和设计,可能有拦截支持 技术,和/或正确的获取 技术,以便为特定的设备提供所有必需的信息 可以以最小的影响、最佳的性能和 可伸缩性


这是对按需加载的注释,没有明确的事务划分或会话打开。在我讨论“我可以在一个会话中使用两个事务吗?”部分中描述的情况时,如果打开第二个事务并延迟加载在打开事务之前已删除的代理,则会出现异常。请注意,默认情况下(读取提交的隔离级别),即使在单个事务中,您也会遇到此问题。啊哈,谢谢!这将是一个违反完整性的异常,对吗?我不记得你会遇到哪个异常。测试一下。