2012-06-07 34 views
0

我调用一个服务来加载一个实体。如果我在集成测试中运行它,这一切都很好,但在服务器上的现实生活中,它会失败。jpa lazyloading在生产模式下失败 - 在testmode中工作正常

此实体中的一些属性是集合。该实体在两种情况下都加载了bean。当我在“query.getSingleResult()”附近的断点处停止debugmode中的执行时,我看到集合已加载。但只有在一个testrun ...

我停止在servletcontainer中的相同的代码,并得到一个InvocationException!?

我的环境look's像:
春季3.1
冬眠3.6.6.Final

东西我曾尝试:
- 搜索中的context.xml(试生产)
差异 - 使用其他context.xml文件(测试)在productionmode

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.hoeso.gwt.platform.server.domain.common.Person.anschrift, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375) at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:122) at org.hibernate.collection.PersistentBag.size(PersistentBag.java:248) at de.hoeso.sis.server.services.common.impl.UserServiceBeanImpl.login(UserServiceBeanImpl.java:397) at de.hoeso.sis.server.rpc.LoginService.execute(LoginService.java:35)

我发现,在测试模式的HIB ernate会话已连接并打开。在productionmode(在servletcontainer存在通过entitymanager.getDelegate()没有可用的连接hibernatesession。

+0

您的测试方法是否将儿童加载到事务中? – JMelnik

+0

“,并得到一个InvocationException”为InvocationException添加堆栈跟踪的副本可能有助于人们回答你的问题。测试和生产bean配置有什么不同? – Raedwald

+0

@JMelnik:这是同一笔交易。我加载实体,下一行代码出现此错误。 – ChangeRequest

回答

0

现在我发现我自己的问题与来自JMelnik一点帮助的解决方案。对于后人,我将分享我的解决方案...

后我把一个断点在靠近代码,而我加载对象,我看到的主要区别。

return entitymanager.isOpen(); 

(布尔型)//测试模式和productionmode

return ((org.hibernate.Session)entitymanager.getDelegate()).isConnected(); 

(布尔值)在测试模式 (布尔值)真//在productionmode假//

return ((org.hibernate.Session)entitymanager.getDelegate()).isOpen(); 

(布尔值)真//在测试模式 (布尔值)假//在productionmode

return((org.hibernate.Session)entitymanager.getDelegate()).getTransaction().isActive(); 

在生产模式中,这会在testmode中抛出一个异常 ,这将返回:(布尔值)true

结论:代码在没有事务的生产模式下运行。在测试模式下,存在一个事务,因为测试类是从一个超类继承的,该超类用@Transactional注解。在ServiceBean的层次结构中,我忘记了这一点。

注解被插入,它完全正常工作!

+0

恭喜修复!如果可以,请确保将您的答案标记为“已接受”,以便其他人能够从您的成功中学习。干杯〜 –

相关问题