All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.amattioli.dominate.hibernate.HibernateRepositoryFactory Maven / Gradle / Ivy

The newest version!
package it.amattioli.dominate.hibernate;

import it.amattioli.dominate.Entity;
import it.amattioli.dominate.Repository;
import it.amattioli.dominate.memory.CollectionRepository;
import it.amattioli.dominate.repositories.AbstractRepositoryFactory;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;

import org.hibernate.collection.AbstractPersistentCollection;

/**
 * Creates a ClassHibernateRepository for objects of the given class if this class
 * is mapped with Hibernate.
 * If the given class is not mapped with Hibernate the {@link #getRepository(Class)}
 * method will return null.

* * As this class extends {@link AbstractRepositoryFactory} it will first look for a * custom factory method before trying to instantiate a default repository. * * @author andrea * */ public class HibernateRepositoryFactory extends AbstractRepositoryFactory { private boolean isPersisted(Class c) { Map metadata = HibernateSessionManager.getSessionFactory().getAllClassMetadata(); return metadata.containsKey(c.getName()); } @Override public > Repository getRepository(Collection coll) { if (coll instanceof AbstractPersistentCollection) { CollectionHibernateRepository result = new CollectionHibernateRepository(coll); return result; } else { return new CollectionRepository(coll); } } protected > Repository getDefaultRepository(Class c) { if (!isPersisted(c)) { return null; } AbstractHibernateRepository result = new ClassHibernateRepository(c); return result; } public > Repository cloneRepository(AbstractHibernateRepository rep) throws CloneNotSupportedException { AbstractHibernateRepository result = (AbstractHibernateRepository)rep.clone(); return result; } }