2016-06-02 7 views
1

I folgende Beziehung OneToMany haben:FetchType.LAZY funktioniert nicht - Hibernate & Kriterien

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "dashboardBox", fetch=FetchType.LAZY) 
public List<DashboardCell> getCells() { 
    return cells; 
} 

und in anderen Klasse ManyToOne:

@ManyToOne(optional = false, fetch=FetchType.LAZY) 
@JoinColumn(name="DASHBOARD_BOX_ID") 
public DashboardBox getDashboardBox() { 
    return dashboardBox; 
} 

Ich versuche, die Boxen ohne Zellen abfragen (wie Ich habe LAZY in Zellenliste). Ich habe versucht, wie folgt aus:

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

auch wie folgt aus:

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

Was will ich erreichen ist nicht tun Liste von Zellen, wenn ich DashboardBox'es abfragen.

Wer hat eine Idee und kann erklären, wie LAZY beim Laden von Kriterien zu erreichen ist? Ich weiß, wenn ich HQL verwenden würde, würde ich es haben, aber ich bin daran interessiert, Criteria zu verwenden.

Danke

+0

was nicht funktioniert? Was sind Ihre erwarteten Ergebnisse und Ihre tatsächlichen Ergebnisse? –

+0

Ich habe die Frage aktualisiert. Was ich erreichen möchte ist, keine Liste von Zellen zu haben, wenn ich DashboardBoxes abfrage. Ich habe versucht mit namedQuery, aber es funktioniert immer noch nicht, also nehme ich an, dass es ein Problem mit Anmerkungen im Modell gibt. – Gazeciarz

Antwort

0

Ich fand die Antwort. In meinem Code war alles in Ordnung. Ich habe nicht gemerkt, dass ich diese Liste von DashboardBoxen in Frühling erholsame Steuerung mit Format json zurückgebe. Was mit der Liste der Zellen geschah, wurde nicht eifrig abgerufen, aber Jackson zwang den Winterschlaf, diese Liste wiederzuerlangen.

Was ich in meinem WebMvcConfigurerAdapter hinzufügen benötigt:

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