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

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