j w*_*ill 2 java collections spring hibernate lazy-loading
我有一个hibernate实体对象调用项目,它有两个集合,称为注释和消息,如下所示:
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,在我的测试方法中获取项目,已经加载了注释和消息,我的测试验证了:
@Test
public void testLoadProjectNotes() {
Project project = projectDao.getProjectById(41);
assertNotNull(project.getNotes().get(0));
Run Code Online (Sandbox Code Playgroud)
}
我认为问题可能是我得到笔记并导致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();
}
Run Code Online (Sandbox Code Playgroud)
所以在通过其id获取项目的方法中没有任何地方我得到了注释和消息的结果.
如何确保懒惰地加载我想要懒惰加载的集合?
一旦调用getter,就会初始化一个延迟加载的集合.因此,如果集合是延迟加载的,那么该语句到目前为止无法用于检测.如果要检查,请使用该方法Hibernate.isInitialized(project.getNotes()).
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |