Java JPA LazyInitializationException?
我使用jquery作为UI,Struts2作为Action,JPA作为数据访问层。我面临的问题是,当我试图从数据库中检索值时,会出现LazyInitializationException。我得到以下跟踪:Java JPA LazyInitializationException?,java,hibernate,jpa-2.0,ejb-3.0,lazy-initialization,Java,Hibernate,Jpa 2.0,Ejb 3.0,Lazy Initialization,我使用jquery作为UI,Struts2作为Action,JPA作为数据访问层。我面临的问题是,当我试图从数据库中检索值时,会出现LazyInitializationException。我得到以下跟踪: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.singpost.ctf.core.persistence.CtfTxn.ctfTxnAttribs
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.singpost.ctf.core.persistence.CtfTxn.ctfTxnAttribs, no session or session was closed
默认情况下,
Fetch=“LAZY”
,当我将Fetch类型更改为EAGER
时,代码工作正常,我不知道我还需要做什么。我被困在中间。 如果你试图从一个实体访问一个偷懒的属性,JPA试图再次访问数据库来获取数据。您的问题是,此时您不在交易范围内。有许多方法可以扩展事务,例如使用openSessionInViewFilter
()
我个人更喜欢的是创建传输对象,每个页面一个,只包含必要的数据。您只需要将实体映射到这些传输对象中,例如使用推土机映射器,这非常强大和方便。
这样,管理事务就容易多了,其次,您不需要在前端中使用数据库实体,因为您的前端不需要了解有关持久层的任何信息。关于stackoverflow上的此异常,以及其他网站上的更多问题,大约有几十个。你检查过其中任何一个吗?@Bozho,因为我没有得到我想要的解决方案,所以只有我重新创建了这个主题。这并不是说我没有引用任何其他资源并发布在这里,我可以在屏幕右侧看到很多引用LazyInitializationException的链接,但没有一个对我有帮助