簡體   English   中英

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;
}

在其他類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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM