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

de.alpharogroup.db.dao.jpa.JpaEntityManagerDao Maven / Gradle / Ivy

There is a newer version: 6.6
Show newest version
package de.alpharogroup.db.dao.jpa;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.sql.DataSource;

import lombok.Getter;
import lombok.Setter;
import de.alpharogroup.db.entity.BaseEntity;
import de.alpharogroup.lang.TypeArgumentsExtensions;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

public abstract class JpaEntityManagerDao, PK extends Serializable> implements
		EntityManagerDao {

	private static final long serialVersionUID = 1L;

	@Getter
	@SuppressWarnings("unchecked")
	private final Class type = (Class) TypeArgumentsExtensions.getFirstTypeArgument(JpaEntityManagerDao.class, this.getClass());
	
	/** The data source. */
	@Setter
	@Getter
	@Autowired
	private DataSource dataSource;

	/** The jdbc template. */
	@Setter
	@Getter
	@Autowired
	private JdbcTemplate jdbcTemplate;

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void create(final T entity) {
		getEntityManager().persist(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void update(final T entity) {
		getEntityManager().merge(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void delete(final T entity) {
		getEntityManager().remove(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void delete(List objects) {
		for (T entity : objects) {
			getEntityManager().remove(entity);
		}
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void delete(PK id) {
		final T entity = get(id);
		delete(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean exists(PK id) {
		return get(id) != null;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List findAll() {
		CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
		CriteriaQuery cq = builder.createQuery(getType());
		Root root = cq.from(getType());
		cq.select(root);
		return getEntityManager().createQuery(cq).getResultList();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public T get(PK id) {
		if (id != null) {
			return getEntityManager().find(type, id);
		}
		return null;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public T load(PK id) {
		return get(id);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public T merge(T object) {		
		return getEntityManager().merge(object);
	}

	
	@Override
	public void refresh(T object) {
		getEntityManager().refresh(object);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List save(List objects) {
		List primaryKeys = new ArrayList();
		for (T object : objects) {
			primaryKeys.add(save(object));
		}
		return primaryKeys;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List merge(List objects) {
		List mergedEntities = new ArrayList();
		for (T object : objects) {
			mergedEntities.add(merge(object));
		}
		return mergedEntities;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public PK save(T object) {
		getEntityManager().persist(object);
		return object.getId();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void saveOrUpdate(List objects) {
		save(objects);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void saveOrUpdate(T object) {
		save(object);

	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void update(List objects) {
		for (T t : objects) {
			update(t);
		}
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void evict(T object) {
		getEntityManager().detach(object);
	}


	/**
	 * {@inheritDoc}
	 */
	@Override
	public Query getQuery(final String hqlQuery) {
		return getEntityManager().createQuery(hqlQuery);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy