FetchType.LAZY 不起作用 - 休眠和标准
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;
}
和其他 class ManyToOne:
@ManyToOne(optional = false, fetch=FetchType.LAZY)
@JoinColumn(name="DASHBOARD_BOX_ID")
public DashboardBox getDashboardBox() {
return dashboardBox;
}
我正在尝试查询没有单元格的 Boxes(因为我在单元格列表中有 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 时实现延迟加载?我知道如果我使用 HQL 我会使用它,但我对使用 Criteria 很感兴趣。
谢谢
我找到了答案。在我的代码中,一切都很好。我没有提到我 return spring restful 控制器中的此 DashboardBoxes 列表,格式为 json。单元格列表中发生的事情并不急于获取,但 Jackson 强制休眠以检索此列表。
我需要在我的 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);
}
我有以下关系 OneToMany:
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "dashboardBox", fetch=FetchType.LAZY)
public List<DashboardCell> getCells() {
return cells;
}
和其他 class ManyToOne:
@ManyToOne(optional = false, fetch=FetchType.LAZY)
@JoinColumn(name="DASHBOARD_BOX_ID")
public DashboardBox getDashboardBox() {
return dashboardBox;
}
我正在尝试查询没有单元格的 Boxes(因为我在单元格列表中有 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 时实现延迟加载?我知道如果我使用 HQL 我会使用它,但我对使用 Criteria 很感兴趣。
谢谢
我找到了答案。在我的代码中,一切都很好。我没有提到我 return spring restful 控制器中的此 DashboardBoxes 列表,格式为 json。单元格列表中发生的事情并不急于获取,但 Jackson 强制休眠以检索此列表。
我需要在我的 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);
}