java – Hibernate无法初始化代理 – 没有Session
发布时间:2020-12-14 16:25:18 所属栏目:Java 来源:网络整理
导读:我的代码检索与用户有关的所有信息: SessionFactory sessionFactory = HibernateUtilities.configureSessionFactory();Session session = sessionFactory.openSession();UserDetails ud = null;SetAddress userAddress = null;try { session.beginTransacti
我的代码检索与用户有关的所有信息:
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. 解决方法userAddress = ud.getAddresses(); session.getTransaction().commit(); for(Address addr: userAddress) { working with lazy associations的hibernate文档清楚地称这种访问为错误.只有当会话仍然打开时,您才可以与懒惰关联的对象进行交互.文档的这一部分还提供了访问对象的这种懒惰关联成员的替代方法,我们更喜欢在我们的应用程序中使用的标准中将提取模式指定为JOIN. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容