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 在另一个事务中延迟加载集合?_Java_Hibernate - Fatal编程技术网

Java 在另一个事务中延迟加载集合?

Java 在另一个事务中延迟加载集合?,java,hibernate,Java,Hibernate,伙计们,我明白了,如果你加载一个对象,在hibernate中关闭一个会话,然后尝试获取相关对象的信息,而这个关联的FetchType是惰性的,它显然会给你LazyInitializationException。有人能告诉我为什么我启动另一个事务,然后尝试加载相关对象,我仍然会得到这个异常吗?假设我有讲师课程和一对多相关课程。课程是延迟加载的 Session session = sessionFactory.getCurrentSession(); session.beginTransaction

伙计们,我明白了,如果你加载一个对象,在hibernate中关闭一个会话,然后尝试获取相关对象的信息,而这个关联的FetchType是惰性的,它显然会给你LazyInitializationException。有人能告诉我为什么我启动另一个事务,然后尝试加载相关对象,我仍然会得到这个异常吗?假设我有讲师课程和一对多相关课程。课程是延迟加载的

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Instructor instructor= session.get(Instructor.class, id);
session.getTransaction().commit();

session = sessionFactory.getCurrentSession();
session.beginTransaction();
System.out.println(instructor.getCourses());

session.getTransaction().commit();

为什么我仍然得到LazyInitializationException?

关键问题是,一个事务中加载的数据可能与先前事务中加载的数据相矛盾,因为另一个事务可能同时修改了数据

也就是说,每个事务将(或在隔离级别较弱的情况下努力)为您提供数据库状态的一致视图,但组合在不同时间获取的视图可能会导致数据视图不一致,从而导致逻辑错误

也就是说,通过使用“扩展持久性上下文”,可以在事务之间扩展延迟加载,但在我的经验中很少使用该特性