gpt4 book ai didi

java - system.out 之后的 hibernate 代理对象

转载 作者:行者123 更新时间:2023-11-30 03:47:13 26 4
gpt4 key购买 nike

我是 hibernate 新手,我遇到了这个问题。

如果我这样做:

Session sesion = HibernateUtil.getSessionFactory().openSession();
Transaction tx = sesion.beginTransaction();

A obj = (A) session.load(A.class,id);
System.out.println(obj);

tx.commit();
session.close();
return obj;

没有问题,GUI 显示对象的数据。

但是如果我这样做:

Session sesion = HibernateUtil.getSessionFactory().openSession();
Transaction tx = sesion.beginTransaction();

A obj = (A) session.load(A.class,id);

// i don't use System.out.println(obj);

tx.commit();
session.close();
return obj;

GUI 没有显示任何内容,我遇到了以下异常。

org.hibernate.LazyInitializationException:无法初始化代理 - 无 session

我一直在阅读 API,但这对我来说是一个全新的世界。有谁知道这是怎么回事吗?

最佳答案

您需要使用session.get(..),而不是使用session.load(..)

A obj = (A) session.get(A.class,id);

session.load(..) 使用代理延迟加载对象,因此如果未访问该对象(在您的示例中使用 System.out.println ) 对象保持未初始化状态。当在 hibernate session 外部访问未初始化的对象(称为分离对象)时,会生成 LazyInitializationException - 因为代理对象无法从 hibernate session 中检索对象的属性。 p>

session.get(..) 不会延迟加载对象,因此仍然可以在 session 外部访问它。 getload 之间几乎没有其他细微差别,因此,我强烈建议您访问以下帖子来了解它们的区别:

了解获取与加载:http://razshahriar.com/2009/01/hibernate-load-vs-get-differences/

关于java - system.out 之后的 hibernate 代理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25354976/

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