[英]FetchType.LAZY does not work - Hibernate & Criteria
我有以下关系OneToMany:
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "dashboardBox", fetch=FetchType.LAZY)
public List<DashboardCell> getCells() {
return cells;
}
在其他类ManyToOne中:
@ManyToOne(optional = false, fetch=FetchType.LAZY)
@JoinColumn(name="DASHBOARD_BOX_ID")
public DashboardBox getDashboardBox() {
return dashboardBox;
}
我试图查询没有单元格的框(因为我在单元格列表中有LAZY)。 我这样尝试过:
public List<DashboardBox> findAll(Users user) {
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(DashboardBox.class)
.add(Restrictions.eq("userId", user.getId()));
return criteria.list();
}
也像这样:
public List<DashboardBox> findAll(Users user) {
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(DashboardBox.class)
.add(Restrictions.eq("userId", user.getId()))
.setFetchMode("cells", FetchMode.SELECT);
return criteria.list();
}
我想实现的是查询DashboardBox时没有单元格列表。
任何人都有想法,可以解释我使用Criteria时如何实现LAZY加载? 我知道如果我会使用HQL,但我对使用Criteria感兴趣。
谢谢
我找到答案了。 在我的代码中,一切都很好。 我没有提到我在Spring Restful Controller中以json格式返回此DashboardBoxes列表。 并没有急切地获取单元列表的内容,但是杰克逊正迫使休眠状态检索该列表。
我需要在WebMvcConfigurerAdapter中添加的内容:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Hibernate5Module());
jacksonConverter.setObjectMapper(mapper);
converters.add(jacksonConverter);
super.configureMessageConverters(converters);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.