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

use*_*111 2 java junit jsp servlets

当我为spring应用程序运行测试用例(Junit)时,我得到了这个错误。

我搜索了此问题,并且得到了这样的信息:每当发生惰性初始化,并且我的应用程序尝试在会话关闭(对象分离)时尝试获取第二级数据,那么就会发生此错误,我们无法将初始化作为EAGER作为其性能问题。

我的测试课程包括:

@RunWith(SpringJUnit4ClassRunner.class)
public class MyTestClass extends AbstractControllerTest {

@Rule
public TestName testMethodName = new TestName();

    @Before
    public void setUp() throws Exception
    {
           super.setUp();
        }
       @After
    public void tearDown() throws Exception
    {
        super.tearDown();
         }
 @Test
  public void myTestMethod ()
 {
    assertTrue("Response Validating",validate(baseEntity,perform()));
 }

}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使方法assertTrue(“ Response Validating”,validate(baseEntity,perform())); 事务中的绑定可以与当前会话或新会话绑定,以便我的分离对象成为持久对象,然后我的应用程序也可以获取第二级数据。我搜索了此问题,并在以下链接上找到了解决方案:http : //www.jroller.com/RickHigh/entry/hibernate_spring_simulating_an_opensessioninviewfilter, 但此链接无法满足我的要求,因为它需要在其上创建事务的目标对象。

chr*_*ke- 8

注释myTestMethod@Transactional(假设你使用基于注解配置)。


Pra*_*ran 5

@Test
@Transactional
public void myTestMethod ()
{
       assertTrue("Response Validating",validate(baseEntity,perform()));
}
Run Code Online (Sandbox Code Playgroud)

  • 我无法在 myTestMethod 或类级别上使用 @Transactional,因为如果我使用此注释,那么在从服务器 Junit 获取响应后将变得无响应(发生错误),因为如果我在此处使用此注释,则意味着控制器类将位于其中的上层事务因此事务永远不会关闭,在这种情况下我必须重新启动数据库。任何进一步的回应将不胜感激。 (2认同)