[Resolvido] Valores não estão sendo gravados em banco e não retorna nenhum erro

6 respostas
A

E ae galera to fazendo um aplicação de cadastro simples, mas não está gravando em banco e não está gerando erro pra que eu possa ter noção do que está errado e corrigir para gravar em banco.
Para essa aplicação estou usando Primefaces,EclipseLink,Glassfish3.1,EJB e Postgresql, caso necessário eu posso compactar o projeto e enviar.
Segue o codigo fonte:

UsuarioDao
package negocio.Dao;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import negocio.entidade.Usuario;

@Stateless
public class UsuarioDao {
    
    @PersistenceContext
    private EntityManager em;

    public void excluir(Usuario usuario) {
        Usuario usuarioASerExcluido = em.merge(usuario);
        em.remove(usuarioASerExcluido);
    }

    public void alterar(Usuario usuario) {
        em.merge(usuario);
    }

    public void inserir(Usuario usuario) {
        em.persist(usuario);
    }

    public List<Usuario> recuperarTodos() {
        return em.createQuery("select age from Usuario as age order by age.nome").getResultList();
    }
}
Usuario (Entidade)
package negocio.entidade;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "usuario")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByUsuarioId", query = "SELECT u FROM Usuario u WHERE u.usuarioId = :usuarioId"),
    @NamedQuery(name = "Usuario.findByNome", query = "SELECT u FROM Usuario u WHERE u.nome = :nome"),
    @NamedQuery(name = "Usuario.findBySobrenome", query = "SELECT u FROM Usuario u WHERE u.sobrenome = :sobrenome"),
    @NamedQuery(name = "Usuario.findBySexo", query = "SELECT u FROM Usuario u WHERE u.sexo = :sexo"),
    @NamedQuery(name = "Usuario.findByDtnascim", query = "SELECT u FROM Usuario u WHERE u.dtnascim = :dtnascim"),
    @NamedQuery(name = "Usuario.findByEmail", query = "SELECT u FROM Usuario u WHERE u.email = :email"),
    @NamedQuery(name = "Usuario.findByEmailalt", query = "SELECT u FROM Usuario u WHERE u.emailalt = :emailalt"),
    @NamedQuery(name = "Usuario.findByTelefone", query = "SELECT u FROM Usuario u WHERE u.telefone = :telefone"),
    @NamedQuery(name = "Usuario.findByRua", query = "SELECT u FROM Usuario u WHERE u.rua = :rua"),
    @NamedQuery(name = "Usuario.findByCep", query = "SELECT u FROM Usuario u WHERE u.cep = :cep"),
    @NamedQuery(name = "Usuario.findByCidade", query = "SELECT u FROM Usuario u WHERE u.cidade = :cidade"),
    @NamedQuery(name = "Usuario.findByEstado", query = "SELECT u FROM Usuario u WHERE u.estado = :estado"),
    @NamedQuery(name = "Usuario.findByPais", query = "SELECT u FROM Usuario u WHERE u.pais = :pais"),
    @NamedQuery(name = "Usuario.findByStatus", query = "SELECT u FROM Usuario u WHERE u.status = :status")})

public abstract class Usuario implements Serializable {
    
    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name="Usuario_Generator", sequenceName="usuario_sequence", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Usuario_Generator")
    @Column(name = "usuario_id")
    private Integer usuarioId;

    @Column(name = "nome", nullable = false)
    private String nome;
    
    
    @Column(name = "sobrenome", nullable = false)
    private String sobrenome;
    
    @Column(name = "sexo", nullable = false)
    private String sexo;
    
    @Column(name = "dtnascim", nullable = false)
    private String dtnascim;

    @Column(name = "email", nullable = false)
    private String email;

    @Column(name = "emailalt", nullable = false)
    private String emailalt;

    @Column(name = "telefone", nullable = false)
    private String telefone;
   
    @Column(name = "rua", nullable = false)
    private String rua;
    
    @Column(name = "cep", nullable = false)
    private String cep;
    
    @Column(name = "cidade", nullable = false)
    private String cidade;
    
    @Column(name = "estado", nullable = false)
    private String estado;
    
    @Column(name = "pais", nullable = false)
    private String pais;
    
    @Column(name = "status", nullable = true)
    private String status;

    public Usuario() {
    }

    public Usuario(Integer usuarioId) {
        this.usuarioId = usuarioId;
    }

    public Usuario(Integer usuarioId, String nome, String sobrenome, String sexo, String dtnascim, String email, String emailalt, String telefone, String rua, String cep, String cidade, String estado, String pais, String status) {
        this.usuarioId = usuarioId;
        this.nome = nome;
        this.sobrenome = sobrenome;
        this.sexo = sexo;
        this.dtnascim = dtnascim;
        this.email = email;
        this.emailalt = emailalt;
        this.telefone = telefone;
        this.rua = rua;
        this.cep = cep;
        this.cidade = cidade;
        this.estado = estado;
        this.pais = pais;
        this.status = status;
    }

    public Integer getUsuarioId() {
        return usuarioId;
    }

    public void setUsuarioId(Integer usuarioId) {
        this.usuarioId = usuarioId;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getDtnascim() {
        return dtnascim;
    }

    public void setDtnascim(String dtnascim) {
        this.dtnascim = dtnascim;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmailalt() {
        return emailalt;
    }

    public void setEmailalt(String emailalt) {
        this.emailalt = emailalt;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getPais() {
        return pais;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (usuarioId != null ? usuarioId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.usuarioId == null && other.usuarioId != null) || (this.usuarioId != null && !this.usuarioId.equals(other.usuarioId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "negocio.entidade.Usuario[ usuarioId=" + usuarioId + " ]";
    }
    
}
UsuarioFachada
package negocio.fachada;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import negocio.entidade.Usuario;
import negocio.Dao.UsuarioDao;

@Stateless
public class UsuarioFachada {
    
    @EJB
    private UsuarioDao usuarioDAO;
    
    public void excluir(Usuario usuario){
        usuarioDAO.excluir(usuario);
    }
    
    public void inserir(Usuario usuario) {
        usuarioDAO.inserir(usuario);
    }
    
    public List<Usuario> listar(){
        return usuarioDAO.recuperarTodos();
    }
}
UsuarioMB
package negocio.managedbean;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import negocio.entidade.Usuario;
import negocio.fachada.UsuarioFachada;

@ManagedBean(name = "agenciaManagedBean")
@SessionScoped
public class UsuarioMB {
    
    private Usuario usuario;
    private ListDataModel usuarios;

    @EJB
    private UsuarioFachada usuarioFachada;
    
    public UsuarioMB(){}

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    
    public ListDataModel getUsuarios() {
        return usuarios;
    }
    
    public String excluir() {
        usuarioFachada.excluir(this.getUsuario());
        this.recuperarUsuarios();
        return "/usuario/ListarUsuarios";
    }
    
    public String listar() {
        this.recuperarUsuarios();
        return "/usuario/ListarUsuarios";
    }
    
    public String inserir() {
            usuarioFachada.inserir(this.getUsuario());
            this.recuperarUsuarios();
            return "/usuario/ListarUsuarios";
    }
    
     private void recuperarUsuario() {
        this.usuario = (Usuario) this.usuarios.getRowData();
    }

     private void recuperarUsuarios() {
        this.usuarios = new ListDataModel(usuarioFachada.listar());
    }
}

6 Respostas

jweibe

Cara eu não sei como funciona a injeção do seu EntityManager através do EJB.
Mais tipow! isso ta me parecendo que a sua transação já esta vindo aberto o que é normal,
porém no seu código eu não encontrei os locais onde vc faz o commit da transação.
Sendo assim o JPA não irá armazenar seus dados.

A
Boa noite amigo, Segue meu EntityManager, porém como ele é gerado automaticamento pelo EJB não sei ao certo se tenho como alterar, já que o mesmo usa a função flush. Caso ajudar segue, e vlw pelo post.
package javax.persistence;

import java.util.Map;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.metamodel.Metamodel;

public interface EntityManager {

    public void persist(Object o);

    public <T extends Object> T merge(T t);

    public void remove(Object o);

    public <T extends Object> T find(Class<T> type, Object o);

    public <T extends Object> T find(Class<T> type, Object o, Map<String, Object> map);

    public <T extends Object> T find(Class<T> type, Object o, LockModeType lmt);

    public <T extends Object> T find(Class<T> type, Object o, LockModeType lmt, Map<String, Object> map);

    public <T extends Object> T getReference(Class<T> type, Object o);

    public void flush();

    public void setFlushMode(FlushModeType fmt);

    public FlushModeType getFlushMode();

    public void lock(Object o, LockModeType lmt);

    public void lock(Object o, LockModeType lmt, Map<String, Object> map);

    public void refresh(Object o);

    public void refresh(Object o, Map<String, Object> map);

    public void refresh(Object o, LockModeType lmt);

    public void refresh(Object o, LockModeType lmt, Map<String, Object> map);

    public void clear();

    public void detach(Object o);

    public boolean contains(Object o);

    public LockModeType getLockMode(Object o);

    public void setProperty(String string, Object o);

    public Map<String, Object> getProperties();

    public Query createQuery(String string);

    public <T extends Object> TypedQuery<T> createQuery(CriteriaQuery<T> cq);

    public <T extends Object> TypedQuery<T> createQuery(String string, Class<T> type);

    public Query createNamedQuery(String string);

    public <T extends Object> TypedQuery<T> createNamedQuery(String string, Class<T> type);

    public Query createNativeQuery(String string);

    public Query createNativeQuery(String string, Class type);

    public Query createNativeQuery(String string, String string1);

    public void joinTransaction();

    public <T extends Object> T unwrap(Class<T> type);

    public Object getDelegate();

    public void close();

    public boolean isOpen();

    public EntityTransaction getTransaction();

    public EntityManagerFactory getEntityManagerFactory();

    public CriteriaBuilder getCriteriaBuilder();

    public Metamodel getMetamodel();
}
jweibe

Vocês esta usando JTA?
Depois que vc executar o em.persist(usuario); da um commit() na sua transação pra ver se resolve.

package negocio.Dao;  
  
import java.util.List;  
import javax.ejb.Stateless;  
import javax.persistence.EntityManager;  
import javax.persistence.PersistenceContext;  
import negocio.entidade.Usuario;  
  
@Stateless  
public class UsuarioDao {  
      
    @PersistenceContext  
    private EntityManager em;  
  
    public void excluir(Usuario usuario) {  
        Usuario usuarioASerExcluido = em.merge(usuario);  
        em.remove(usuarioASerExcluido);  
    }  
  
    public void alterar(Usuario usuario) {  
        em.merge(usuario);  
    }  
  
    public void inserir(Usuario usuario) {  
        //Commit na Transação
        em.persist(usuario);  
        em.getTransaction().commit(); 
    }  
  
    public List<Usuario> recuperarTodos() {  
        return em.createQuery("select age from Usuario as age order by age.nome").getResultList();  
    }  
}
A

boa tarde,

Não estou usando conexão local, no meu persistence.xml estou passando as informações de conexão.
Acredito ser isso tbm, como estou usando containner vou alterar o persistence.

A

Desculpe a minha ultima msg, acabei me equivocando.
Caso for melhor para você visualizar meu projeto segue o link, tanto do projeto como do script do banco.

Projeto
http://dl.dropbox.com/u/59446647/WebCadastro.rar

Script
http://dl.dropbox.com/u/59446647/usuario.sql

abrço

A

Dia meu amigo,

Referente a essa tópico, foi resolvido porque não me atentei a uma classe DAO (que é uma beans) e não lancei o @Stateless dentro dela.

Vlw pela atenção.

Criado 28 de janeiro de 2012
Ultima resposta 4 de fev. de 2012
Respostas 6
Participantes 2