java – Hibernate无法初始化代理 – 没有Session

前端之家收集整理的这篇文章主要介绍了java – Hibernate无法初始化代理 – 没有Session前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_0@
我的代码检索与用户有关的所有信息:
SessionFactory sessionFactory = HibernateUtilities.configureSessionFactory();
Session session = sessionFactory.openSession();
UserDetails ud = null;
Set<Address> userAddress = null;

try {
    session.beginTransaction();
    ud = (UserDetails) session.get(UserDetails.class,1);
    userAddress = ud.getAddresses();
    session.getTransaction().commit();
} catch (HibernateException e) {
    e.printStackTrace();
    session.getTransaction().rollback();
} finally {
    session.close();
}

System.out.println(ud.getName());

for(Address addr: userAddress){
    System.out.println("State " + addr.getState());
}

ud.getAddresses()只返回一组用户的地址.

我的问题是:为什么ud对象仍然有它的值(例如,名称),即使会话已经关闭? getAddresses()是UserDetails类的实例变量.但是为什么我不能检索它的值,但是我可以检索UserDetails类的常规实例变量?

ud.getAddresses()是一个@EmbeddedCollection.

@H_403_11@解决方法
userAddress = ud.getAddresses();
session.getTransaction().commit();
for(Address addr: userAddress) {

working with lazy associations的hibernate文档清楚地称这种访问为错误.只有当会话仍然打开时,您才可以与懒惰关联的对象进行交互.文档的这一部分还提供了访问对象的这种懒惰关联成员的替代方法,我们更喜欢在我们的应用程序中使用的标准中将提取模式指定为JOIN.

原文链接:https://www.f2er.com/java/125448.html

猜你在找的Java相关文章