/********************************************************************************************************************************* * Autorskie Prawa Majątkowe - Moose Spółka z ograniczoną odpowiedzialnością * * Copyright 2017 Moose Spółka z ograniczoną odpowiedzialnością ********************************************************************************************************************************/ package eu.mooseinc.dell.form.dao.impl.base; import eu.mooseinc.dell.form.dao.base.Dao; import eu.mooseinc.dell.form.entity.base.BaseEntity; import eu.mooseinc.dell.form.exception.ObjectNotFoundException; import eu.mooseinc.dell.form.type.Entity; import java.lang.reflect.ParameterizedType; import java.text.MessageFormat; import java.util.List; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Autowired; /** * Bazowa implementacja dla {@link Dao}. * * @param typ encji. */ public abstract class AbstractDao implements Dao { @Autowired protected SessionFactory sessionFactory; /** * Klasa obiektu obsługiwanego przez DAO. */ private final Class clazz; /** * Typ encji. */ private final Entity entity; /** * Konstruktor. * * @param entity typ encji. */ public AbstractDao(final Entity entity) { this.clazz = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; this.entity = entity; } @Override public T persist(final T t) { sessionFactory.getCurrentSession().persist(t); return t; } @Override public void delete(final long id) throws ObjectNotFoundException { sessionFactory.getCurrentSession().delete(get(id)); } @Override public void remove(final T t) { sessionFactory.getCurrentSession().delete(t); } @Override public T find(final long id) { return sessionFactory.getCurrentSession().get(clazz, id); } @Override public T get(final long id) throws ObjectNotFoundException { final T t = find(id); if (t == null) throw new ObjectNotFoundException( MessageFormat.format("Nie odnaleziono obiektu {0} o identyfikatorze {1}", entity.getName(), id)); return t; } @Override public List getAll() { final Session session = sessionFactory.getCurrentSession(); final CriteriaBuilder builder = session.getCriteriaBuilder(); final CriteriaQuery criteriaQuery = builder.createQuery(clazz); final Root from = criteriaQuery.from(clazz); criteriaQuery.select(from); final Query query = session.createQuery(criteriaQuery); return query.getResultList(); } /** * Tworzy zapytanie nazwane. * * @param queryName nazwa zapytania HQL. * * @return obiekt zapytania. */ protected Query createNamedQuery(final String queryName) { return sessionFactory.getCurrentSession().createNamedQuery(queryName, clazz); } /** * Zwraca rodzaj encji. * * @return rodzaj encji. */ protected Entity getEntity() { return entity; } }