How do I set the fetch mode for Criteria association?
Date: 2010-09-16. Category: org.hibernate examples. Hits: 19K time(s).
To set the fetching mode for association we can call the Criteria's setFetchMode() method. We can user the FetchMode.SELECT or FetchMode.JOIN.
package org.kodejava.example.hibernate.criteria;
import org.hibernate.*;
import org.hibernate.criterion.Restrictions;
import org.hibernate.cfg.AnnotationConfiguration;
import org.kodejava.example.hibernate.model.Recording;
import java.util.List;
public class FetchModeDemo {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().
configure("hibernate.cfg.xml").
buildSessionFactory();
}
catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() throws HibernateException {
return sessionFactory.openSession();
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
final Session session = getSession();
try {
Criteria criteria = session.createCriteria(Recording.class)
.setFetchMode("artist", FetchMode.SELECT)
.setFetchMode("label", FetchMode.SELECT)
.add(Restrictions.eq("title", "Please Please Me"));
List<Recording> recordings = criteria.list();
for (Recording recording : recordings) {
System.out.println("Recording = " + recording.getTitle());
System.out.println("Artist = " + recording.getArtist().getName());
}
} finally {
session.close();
}
}
}