/**
*
*/
package com.teefun.db.dao.impl;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import org.springframework.stereotype.Repository;
import com.teefun.db.dao.QueueDAO;
import com.teefun.db.entity.QueueEntity;
/**
* Default {@link QueueDAO}.
*
* @author Rajh
*
*/
@Repository
public class QueueDAOImpl implements QueueDAO {
/**
* The entity manager.
*/
@PersistenceContext
private EntityManager entityManager;
/**
* Query builder.
*/
private CriteriaBuilder builder;
/**
* Create builder.
*/
@PostConstruct
public void initBuilder() {
this.builder = this.entityManager.getCriteriaBuilder();
}
@Override
@Transactional
public void save(final QueueEntity entity) {
this.entityManager.persist(entity);
}
@Override
public List<QueueEntity> list() {
final CriteriaQuery<QueueEntity> criteria = this.builder.createQuery(QueueEntity.class);
final Root<QueueEntity> queue = criteria.from(QueueEntity.class);
criteria.select(queue);
return this.entityManager.createQuery(criteria).getResultList();
}
@Override
public QueueEntity getByName(final String name) {
final CriteriaQuery<QueueEntity> criteria = this.builder.createQuery(QueueEntity.class);
final Root<QueueEntity> queueRoot = criteria.from(QueueEntity.class);
criteria.select(queueRoot);
final Predicate namePredicate = this.builder.like(queueRoot.<String> get("name"), name);
criteria.where(namePredicate);
try {
return this.entityManager.createQuery(criteria).getSingleResult();
} catch (final NoResultException ex) {
return null;
}
}
@Override
@Transactional
public void remove(final QueueEntity entity) {
this.entityManager.remove(entity);
}
}