java examples
Home Java Examples Resources Java Interview Questions
Brainpower SEO

How to set the fetch mode for Criteria association?

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 com.javacoderanch.example.hibernate.criteria;

import org.hibernate.*;
import org.hibernate.criterion.Restrictions;
import org.hibernate.cfg.AnnotationConfiguration;
import com.javacoderanch.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();
        }
    }
}