Hibernate 单元测试获取类型延迟

Hibernate 单元测试获取类型延迟,hibernate,spring,Hibernate,Spring,我有以下代码: @Entity public class Foo { @OneToMany(mappedBy = "Foo", fetch = FetchType.LAZY) @Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN }) private Collection<Bar> bars; } @Entity public class Bar { @ManyToOne private Foo foo; } 我需

我有以下代码:

@Entity
public class Foo {

@OneToMany(mappedBy = "Foo", fetch = FetchType.LAZY)
    @Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
private Collection<Bar> bars;
}

@Entity
public class Bar {

@ManyToOne
private Foo foo;
}
我需要你的帮助,找出我需要你帮助的代码 要通过此测试,需要进行以下操作

谢谢你的帮助
Netta

那么您想测试在第一次访问集合时,
集合是否被延迟加载

我通过实现两个测试做了类似的事情。一个测试用于检查延迟加载数据时集合的正确大小,另一个测试用于检查在分离集合后访问该集合时引发的特定异常

类似于此(JPA/Hibernate+TestNG)


对不起,我不是有意要把它作为回答。你想在这里做什么?@Netta:如果你尝试了这个,但它不起作用,那么你的惰性加载就不起作用了。在执行clear()/execute()之前,请仔细记下您调用的内容。对集合执行任何操作(如调用isEmpty())都会初始化它,然后逐出所属实例也不会有任何好处。我尝试了hibernateTemplate.execute(foo)和hibernateTemplate.clear()。列表仍在加载中。是否可能因为会话仍处于活动状态而再次检索对象?太神奇了。使用这个entityManager.clear()消除了我所有的疑虑,因为我能够测试延迟加载的东西,并且可以确保我做了正确的事情,使它按预期工作。
@Transactionl
public class TestDao {

@Test
public void testLazy (){
Foo foo = dao.findById(1);
assertTrue(foo.getBars() != null && !foo.getBars().isEmpty())
//SOME CODE THAT I NEED YOUR HELP WITH
assertTrue(foo.getBars() == null || foo.getBars().isEmpty())
}

@Test
test1...

@Test
test2...

@Test
test3...

}
@Test
public void testLazyLoading() {

  // load foo
  Foo foo = dao.findById(1);

  // check correct size
  assertTrue(foo.getBars() != null && !foo.getBars().isEmpty())

}

@Test(expectedExceptions=LazyInitializationException.class)
public void testLazyInitializationException() {

  // load foo
  Foo foo = dao.findById(1);

  // detach all instances
  entityManager.clear();

  // will throw LazyInitializationException
  foo.getBars().size();

}