package br.com.triadworks.issuetracker.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import br.com.triadworks.issuetracker.JpaUtils; import br.com.triadworks.issuetracker.model.Projeto; @Transactional @Component public class ProjetoDaoImpl implements ProjetoDao { @PersistenceContext private EntityManager entityManager; @Override public void salva(Projeto projeto) { entityManager.persist(projeto); } @Override public void atualiza(Projeto projeto) { entityManager.merge(projeto); } @Transactional(propagation=Propagation.SUPPORTS, readOnly=true) @Override public Projeto carrega(Long id) { Projeto projeto = entityManager.find(Projeto.class, id); return projeto; } @Override public void remove(Projeto projeto) { entityManager.remove(projeto); } @Transactional(propagation=Propagation.SUPPORTS, readOnly=true) @Override public List<Projeto> listaTudo() { TypedQuery<Projeto> query = entityManager .createQuery("select new Projeto(p.id, upper(p.nome)) from Projeto p", Projeto.class); List<Projeto> projetos = query.getResultList(); return projetos; } @Transactional(propagation=Propagation.SUPPORTS, readOnly=true) @Override public List<String> listaTodosOsNomes() { TypedQuery<String> query = entityManager .createQuery("select p.nome from Projeto p", String.class); List<String> nomes = query.getResultList(); return nomes; } @Transactional(propagation=Propagation.SUPPORTS, readOnly=true) @Override public Long count() { TypedQuery<Long> query = entityManager .createQuery("select count(p) from Projeto p", Long.class); Long count = query.getSingleResult(); return count; } }