FetchType.LAZY不起作用 - Hibernate&标准

时间:2016-06-02 10:50:25

标签: java hibernate 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;
}

我正在尝试查询没有单元格的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时如何实现LAZY加载?我知道,如果我使用HQL,我会有它,但我有兴趣使用Criteria&#39。

由于

1 个答案:

答案 0 :(得分:0)

我找到了答案。在我的代码中一切都很好。我没有让我知道我在Spring springful控制器中使用格式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);
}