
org.sklsft.commons.model.patterns.BaseDaoImpl Maven / Gradle / Ivy
The newest version!
package org.sklsft.commons.model.patterns;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Order;
import jakarta.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.sklsft.commons.api.exception.repository.ObjectNotFoundException;
import org.sklsft.commons.api.model.OrderType;
import org.sklsft.commons.model.interfaces.Entity;
public abstract class BaseDaoImpl, U extends Serializable> implements BaseDao {
/*
* resources injected with spring
*/
@Inject
protected SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
private Class clazz;
/**
* constructor with the correct class to handle
*/
public BaseDaoImpl(Class clazz) {
super();
this.clazz = clazz;
}
/**
* count object list
*/
@Override
public Long count() {
Session session = this.sessionFactory.getCurrentSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery criteria = builder.createQuery(Long.class);
Root root = criteria.from(clazz);
criteria.select(builder.count(root));
return session.createQuery(criteria).getSingleResult();
}
/**
* load object list
*/
@Override
public List loadList() {
Session session = this.sessionFactory.getCurrentSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery criteria = builder.createQuery(clazz);
Root root = criteria.from(clazz);
criteria.select(root);
List orders = new ArrayList<>();
JpaCriteriaUtils.addOrder(builder, orders, root.get("id"), OrderType.DESC);
criteria.orderBy(orders);
return session.createQuery(criteria).getResultList();
}
/**
* load object list eagerly
*/
@Override
public abstract List loadListEagerly();
/**
* load object
*/
@Override
public T load(U id) {
T obj = get(id);
if (obj == null) {
throw new ObjectNotFoundException(clazz.getSimpleName() + ".notFound");
} else {
return obj;
}
}
/**
* get object
*/
@Override
public T get(U id) {
return this.sessionFactory.getCurrentSession().get(clazz, id);
}
/**
* save object
*/
@Override
@SuppressWarnings("unchecked")
public U save(T obj) {
return (U) this.sessionFactory.getCurrentSession().save(obj);
}
/**
* delete object
*/
@Override
public void delete(T obj) {
this.sessionFactory.getCurrentSession().delete(obj);
}
/**
* flush
*/
@Override
public void flush() {
sessionFactory.getCurrentSession().flush();
}
/**
* evict obj
*/
@Override
public void evict(T obj) {
sessionFactory.getCurrentSession().evict(obj);
}
/**
* clear
*/
@Override
public void clear() {
sessionFactory.getCurrentSession().clear();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy