我有一个名为project的hibernate实体对象,它包含两个集合:notes和messages。
@Entity
@Table(name = "project")
public class Project {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
private List<Note> notes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
private List<Message> messages;
...
}
但是在我的获取项目的测试方法中,笔记和消息已经被加载了,我不知道为什么,我的测试验证了这一点:
@Test
public void testLoadProjectNotes() {
Project project = projectDao.getProjectById(41);
assertNotNull(project.getNotes().get(0));
我认为问题可能在于我获取了笔记并导致Hibernate将它们加载到项目中。不过,在执行该语句之前,调试器显示在获取笔记之前就已经将其加载到项目中。
以下是按ID获取项目的方法:
public Project getProjectById(long id) {
Criteria criteria = new SmartCriteria(getSession().createCriteria(Project.class));
criteria.add(Restrictions.eq("id", id));
return (Project) criteria.uniqueResult();
}
在通过id获取项目的方法中,我没有得到笔记和消息的结果。
我该如何确保我想要懒加载的集合正在被懒加载?
project.getNotes().get(0)
进行调试?当你调用它时,Hibernate 会发送一个请求来加载笔记。因此,如果你进行调试,你会发现在调用getnotes()
之前没有任何值。 - Viswanath Lekshmanan@OneToMany
和@ManyToMany
的默认设置是进行延迟加载。 - Powerlord