当我运行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()));
}
}
字符串
有没有办法把方法assertTrue(“Response Validating”,validate(baseEntity,perform();在事务中可以绑定当前会话或新会话,以便我的分离对象成为持久化对象,然后我的应用程序也可以获得第二级数据。我搜索了这个问题,我在链接上找到了解决方案:http://www.jroller.com/RickHigh/entry/hibernate_spring_simulating_an_opensessioninviewfilter但是这个链接不满足我的要求,因为它需要在其上创建事务的目标对象。
4条答案
按热度按时间kyks70gy1#
字符串
2wnc66cl2#
用
@Transactional
注解myTestMethod
(假设您使用的是基于注解的配置)。3wabscal3#
我得到了这个问题的解决方案。我在我的测试代码中实现了OpenSessionInViewFilter来克服这个问题,但却犯了愚蠢的错误。
请看下面的代码:
字符串
之前我没有使用
session.setFlushMode(FlushMode.NEVER)
,这是一个错误。BTW谢谢
ycggw6v24#
我也得到了这个错误,因为在实体中使用了
(fetch = FetchType.LAZY)
。Lazy意味着对象不会被加载到Session上下文中,直到它在代码中被访问。
当我们尝试使用代理对象从数据库中获取延迟加载的对象时,会发生此错误。
然后我就用了
(fetch = FetchType.EAGER)
,然后这个问题就解决了。