package br.com.triadworks.issuetracker.dao;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import br.com.triadworks.issuetracker.model.Usuario;
@Primary
@Transactional
@Repository
@Scope("singleton")
public class UsuarioDaoImpl implements UsuarioDao {
@PersistenceContext
private EntityManager entityManager;
@PostConstruct
public void init() {
System.out.println("CRIADO!!");
}
@PreDestroy
public void destroy() {
System.out.println("MORREU!");
}
@Override
public void salva(Usuario usuario) {
entityManager.persist(usuario);
}
@Override
public void atualiza(Usuario usuario) {
entityManager.merge(usuario);
}
@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
@Override
public Usuario carrega(Long id) {
Usuario usuario = entityManager.find(Usuario.class, id);
return usuario;
}
@Override
public void remove(Usuario usuario) {
entityManager.remove(usuario);
}
@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
@Override
public Usuario buscaPor(String login, String senha) {
TypedQuery<Usuario> query = entityManager
.createQuery("select u from Usuario u " +
"where u.login = :login and u.senha = :senha", Usuario.class);
query.setParameter("login", login);
query.setParameter("senha", senha);
Usuario usuario = query.getSingleResult();
return usuario;
}
@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
@Override
public List<Usuario> listaTudo() {
TypedQuery<Usuario> query = entityManager
.createQuery("select u from Usuario u", Usuario.class);
List<Usuario> usuarios = query.getResultList();
return usuarios;
}
@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
@Override
public Usuario buscaPorLogin(String login) {
TypedQuery<Usuario> query = entityManager
.createNamedQuery("Usuario.buscaPorLogin", Usuario.class);
query.setParameter("login", login);
Usuario usuario = query.getSingleResult();
return usuario;
}
}