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();
}