115 lines
3.1 KiB
Java
115 lines
3.1 KiB
Java
/*********************************************************************************************************************************
|
|
* 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 <T> typ encji.
|
|
*/
|
|
public abstract class AbstractDao<T extends BaseEntity> implements Dao<T> {
|
|
|
|
@Autowired
|
|
protected SessionFactory sessionFactory;
|
|
|
|
/**
|
|
* Klasa obiektu obsługiwanego przez DAO.
|
|
*/
|
|
private final Class<T> clazz;
|
|
|
|
/**
|
|
* Typ encji.
|
|
*/
|
|
private final Entity entity;
|
|
|
|
/**
|
|
* Konstruktor.
|
|
*
|
|
* @param entity typ encji.
|
|
*/
|
|
public AbstractDao(final Entity entity) {
|
|
this.clazz = (Class<T>) ((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<T> getAll() {
|
|
final Session session = sessionFactory.getCurrentSession();
|
|
final CriteriaBuilder builder = session.getCriteriaBuilder();
|
|
final CriteriaQuery<T> criteriaQuery = builder.createQuery(clazz);
|
|
final Root<T> from = criteriaQuery.from(clazz);
|
|
criteriaQuery.select(from);
|
|
final Query<T> query = session.createQuery(criteriaQuery);
|
|
return query.getResultList();
|
|
}
|
|
|
|
/**
|
|
* Tworzy zapytanie nazwane.
|
|
*
|
|
* @param queryName nazwa zapytania HQL.
|
|
*
|
|
* @return obiekt zapytania.
|
|
*/
|
|
protected Query<T> createNamedQuery(final String queryName) {
|
|
return sessionFactory.getCurrentSession().createNamedQuery(queryName, clazz);
|
|
}
|
|
|
|
/**
|
|
* Zwraca rodzaj encji.
|
|
*
|
|
* @return rodzaj encji.
|
|
*/
|
|
protected Entity getEntity() {
|
|
return entity;
|
|
}
|
|
}
|