How do I set the fetch mode for Criteria association?

o set the fetching mode for association we can call the Criteria‘s setFetchMode() method. We can use the FetchMode.SELECT or FetchMode.JOIN.

package org.kodejava.hibernate;

import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.kodejava.hibernate.model.Record;

import java.util.List;

public class FetchModeDemo {
    public static Session getSession() throws HibernateException {
        String cfg = "hibernate.cfg.xml";
        SessionFactory sessionFactory = new Configuration().configure(cfg)
                .buildSessionFactory();
        return sessionFactory.openSession();
    }

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        try (Session session = getSession()) {
            Criteria criteria = session.createCriteria(Record.class)
                    .setFetchMode("artist", FetchMode.SELECT)
                    .setFetchMode("label", FetchMode.SELECT)
                    .add(Restrictions.like("title", "The Beatles%"));

            List<Record> records = criteria.list();
            for (Record record : records) {
                System.out.println("Recording  = "
                        + record.getTitle());
                System.out.println("Artist     = "
                        + record.getArtist().getName());
            }
        }
    }
}

Maven Dependencies

<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.9.Final</version>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

Maven Central Maven Central