package hibernate; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.MapLoader; import com.hazelcast.core.MapLoaderLifecycleSupport; import data.Person; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; /** * Hibernate based MapLoader **/ public class PersonMapLoader implements MapLoader<Long, Person>, MapLoaderLifecycleSupport { private SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); private Session session = sessionFactory.openSession(); private Query allKeysQuery = session.createQuery("select id from Person").setFetchSize(1000); public PersonMapLoader() { } @Override public void init(HazelcastInstance hz, Properties props, String arg2) { } @Override public Person load(Long key) { return (Person) session.get(Person.class, key); } @Override public Map<Long, Person> loadAll(Collection<Long> keys) { Criteria criteria = session.createCriteria(Person.class).add(Restrictions.in("id", keys)); List<Person> persons = criteria.list(); Map<Long, Person> map = new HashMap<Long, Person>(); for (Person person : persons) { map.put(person.getId(), person); } return map; } @Override public Iterable<Long> loadAllKeys() { // For smaller result set sizes use: allKeysQuery.list() return new QueryIterable<Long>(allKeysQuery); } @Override public void destroy() { session.close(); } }