Sou iniciante em Hibernate e jsf e estou com o seguinte erro: o Cenário é o seguinte tenho 2 tabelas usuários e perfis os meus perfis funcionam normalmente porem não consigo salvar meus usuários, aparentemente o meu código não esta localizando a minha chave estrangeira seguem abaixo o log de erro e meu código, já testei de várias forma fiz diversas alterações porem não consigo fazer com que minha classe DAOTeste
salve o registro.
Erro:
INFO: HHH000037: Columns: [us_login, us_senha, perfil_per_id, us_id, us_situação, us_nome, us_ramal, us_email, us_obsevacao]
Hibernate: select perfil0_.per_id as per_id1_0_, perfil0_.per_descricao as per_desc2_0_ from Perfil perfil0_ where perfil0_.per_id=?
classe usuario.java
package br.com.teste.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import com.sun.istack.internal.NotNull;
@Entity
@Table(name="Usuario")
@NamedQueries({@NamedQuery(name="Usuario.listar",query="SELECT usuario FROM Usuario usuario"),
@NamedQuery(name="Usuario.buscarPorCodigo",query="SELECT usuario FROM Usuario usuario WHERE usuario.id=:id"),
})
public class Usuario {
@Id
@Column (name="us_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column (name="us_nome" ,length=45,nullable=false)
@NotEmpty(message="Informe seu nome!")
private String nome;
@Column (name="us_email",length=45,nullable=false)
@NotEmpty(message="Informe seu e-mail!")
@Email(message="E-mail inválido!")
private String email;
@Column (name="us_login",length=45,nullable=false)
@NotEmpty(message="Informe seu login!")
private String login;
@Column (name="us_senha",length=16,nullable=false)
@NotEmpty(message="Informe sua senha!")
private String senha;
@Column (name="us_ramal")
@NotEmpty(message="Informe seu ramal!")
private int ramal;
@Column (name="us_obsevacao",length=45)
private String obsevacao;
@Column (name="us_situação",nullable=false)
@NotEmpty(message="Informe uma situação!")
@NotNull
private Boolean situação;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="Perfil_per_id",referencedColumnName="per_id",nullable=false)
@NotEmpty
private Perfil perfil;
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public int getRamal() {
return ramal;
}
public void setRamal(int ramal) {
this.ramal = ramal;
}
public String getObsevacao() {
return obsevacao;
}
public void setObsevacao(String obsevacao) {
this.obsevacao = obsevacao;
}
public Boolean getSituação() {
return situação;
}
public void setSituação(Boolean situação) {
this.situação = situação;
}
@Override
public String toString() {
return "Usuario [id=" + id + ", nome=" + nome + ", email=" + email + ", login=" + login + ", senha=" + senha
+ ", ramal=" + ramal + ", obsevacao=" + obsevacao + ", situação=" + situação + ", perfil=" + perfil
+ "]";
}
}
classe usuarioDAO teste (esta comentado pois deu erro sem os comentários ai decidi testar o método de forma isolada)
package br.com.teste.test;
//import java.util.List;
//import org.junit.Ignore;
import org.junit.Test;
import br.com.teste.DAO.PerfilDAO;
import br.com.teste.DAO.UsuarioDAO;
import br.com.teste.domain.Perfil;
import br.com.teste.domain.Usuario;
public class UsuarioDAOTest {
@Test
public void salvar() throws Exception {
PerfilDAO dao = new PerfilDAO();
Perfil p2 = dao.buscarPorCodigo(8L);
Usuario u1 = new Usuario();
u1.setNome("Adriano");
u1.setEmail("Adriano@teste.com.br");
u1.setLogin("adriano");
u1.setObsevacao("teste1");
u1.setPerfil(p2);
u1.setRamal(95619);
u1.setSenha("456");
u1.setSituação(true);
UsuarioDAO udao = new UsuarioDAO();
udao.salvar(u1);
}
// @Test
// @Ignore
// public void listar() {
// UsuarioDAO dao = new UsuarioDAO();
// List<Usuario> usuarios = dao.listar();
//
// for (Usuario usuario : usuarios) {
//
// System.out.println(usuario);
//
// }
//
// }
//
// @Test
// @Ignore
//
//
// public void buscarPorCodigo() {
//
// UsuarioDAO dao = new UsuarioDAO();
// Usuario p1 = dao.buscarPorCodigo(6L);
//
// System.out.println(p1);
//
// }
//
// @Test
// @Ignore
// public void excluir() throws Exception {
//
// UsuarioDAO dao = new UsuarioDAO();
// Usuario usuario = dao.buscarPorCodigo(6L);
//
//
// dao.excluir(usuario);
//
// }
//
// @Test
// @Ignore
// public void editar() throws Exception {
// PerfilDAO dao = new PerfilDAO();
// Perfil p2 = dao.buscarPorCodigo(9L);
//
// UsuarioDAO udao = new UsuarioDAO();
// Usuario usuario = udao.buscarPorCodigo(4L);
//
// usuario.setNome("Arlindo");
// usuario.setEmail("Arlindo@teste.com.br");
// usuario.setLogin("arlindo");
// usuario.setObsevacao("teste10");
// usuario.setPerfil(p2);
// usuario.setRamal(95619);
// usuario.setSenha("123");
// usuario.setSituação(true);
//
// udao.editar(usuario);
//
// }
//
}
classe usuariodao
package br.com.teste.DAO;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.teste.domain.Perfil;
import br.com.teste.domain.Usuario;
import br.com.teste.util.HibernateUtil;
public class UsuarioDAO {
public void salvar(Usuario usuario) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.save(usuario);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
@SuppressWarnings("unchecked")
public List<Usuario> listar() {
Session sessao = HibernateUtil.getSessionFactory().openSession();
List<Usuario> usuarios = null;// inicia transacao como nula
try {
Query consulta = sessao.getNamedQuery("Usuario.listar");
usuarios = consulta.list();
} catch (RuntimeException ex) {
throw ex;
}
finally {
sessao.close();
}
return usuarios;
}
public Usuario buscarPorCodigo(Long id) {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Usuario usuario = null;// inicia transacao como nula
try {
Query consulta = sessao.getNamedQuery("Usuario.buscarPorCodigo");
consulta.setLong("Id", id);
usuario = (Usuario) consulta.uniqueResult();
} catch (RuntimeException ex) {
throw ex;
}
finally {
sessao.close();
}
return usuario;
}
public void excluir(Usuario usuario) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.delete(usuario);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
public void editar(Perfil perfil) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.update(perfil);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
public void editar(Usuario usuario) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.update(usuario);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
}
****************classe usuárioBean************************
package br.com.teste.Bean;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import br.com.teste.util.JSFUtil;
import br.com.teste.DAO.PerfilDAO;
import br.com.teste.DAO.UsuarioDAO;
import br.com.teste.domain.Perfil;
import br.com.teste.domain.Usuario;
@ManagedBean(name = "MBUsuario")
@ViewScoped
public class UsuarioBean {
private Usuario usuario;
private ArrayList<Usuario>itens;
private ArrayList<Usuario>itensFiltrados;
private String acao;
private Long codigo;
private List<Perfil>listaPerfil;
public void setListaPerfil(List<Perfil> listaPerfil) {
this.listaPerfil = listaPerfil;
}
public List<Perfil> getListaPerfil() {
return listaPerfil;
}
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
public String getAcao() {
return acao;
}
public void setAcao(String acao) {
this.acao = acao;
}
public Usuario getUsuario() {
return usuario;
}
//
public void setProduto(Usuario usuario) {
this.usuario = usuario;
}
public ArrayList<Usuario> getItens() {
return itens;
}
public void setItens(ArrayList<Usuario> itens) {
this.itens = itens;
}
public ArrayList<Usuario> getItensFiltrados() {
return itensFiltrados;
}
public void setItensFiltrados(ArrayList<Usuario> itensFiltrados) {
this.itensFiltrados = itensFiltrados;
}
// @PostConstruct
public void prepararPesquisa(){
try {
UsuarioDAO fdao = new UsuarioDAO();
itens = (ArrayList<Usuario>) fdao.listar();
} catch (RuntimeException e) {
JSFUtil.adicionarMensagemErro("ex.getMessage()");
e.printStackTrace();
}
}
public void carregarCadastro(){
try {
if(codigo != null){
UsuarioDAO fdao = new UsuarioDAO();
usuario = fdao.buscarPorCodigo(codigo);
}
else
{
usuario = new Usuario();
}
PerfilDAO dao = new PerfilDAO();
listaPerfil = dao.listar();
} catch (RuntimeException e) {
JSFUtil.adicionarMensagemErro("ex.getMessage()");
e.printStackTrace();
}
}
public void novo(){
usuario = new Usuario();
}
public void salvar() {
try {
UsuarioDAO fdao = new UsuarioDAO();
fdao.salvar(usuario);
usuario = new Usuario();
JSFUtil.adicionarMensagemSucesso("Produto salvo com sucesso!");
} catch (Exception e) {
JSFUtil.adicionarMensagemErro("ex.getMessage()");
e.printStackTrace();
}
}
public void excluir(){
try {
UsuarioDAO fdao = new UsuarioDAO();
fdao.excluir(usuario);
JSFUtil.adicionarMensagemSucesso("Produto excluido com sucesso!");
} catch (Exception e) {
JSFUtil.adicionarMensagemErro("ex.getMessage()");
e.printStackTrace();
}
}
public void editar(){
try {
UsuarioDAO fdao = new UsuarioDAO();
fdao.editar(usuario);
JSFUtil.adicionarMensagemSucesso("Produto editado com sucesso!");
} catch (Exception e) {
JSFUtil.adicionarMensagemErro("ex.getMessage()");
e.printStackTrace();
}
}
}
*********** classe perfildao ********************
package br.com.teste.DAO;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.teste.domain.Perfil;
import br.com.teste.util.HibernateUtil;
public class PerfilDAO {
public void salvar(Perfil perfil) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.save(perfil);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
@SuppressWarnings("unchecked")
public List<Perfil> listar() {
Session sessao = HibernateUtil.getSessionFactory().openSession();
List<Perfil> perfis = null;// inicia transacao como nula
try {
Query consulta = sessao.getNamedQuery("Perfil.listar");
perfis = consulta.list();
} catch (RuntimeException ex) {
throw ex;
}
finally {
sessao.close();
}
return perfis;
}
public Perfil buscarPorCodigo(Long id) {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Perfil perfil = null;// inicia transacao como nula
try {
Query consulta = sessao.getNamedQuery("Perfil.buscarPorCodigo");
consulta.setLong("Id", id);
perfil = (Perfil) consulta.uniqueResult();
} catch (RuntimeException ex) {
throw ex;
}
finally {
sessao.close();
}
return perfil;
}
public void excluir(Perfil perfil) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.delete(perfil);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
public void editar(Perfil perfil) throws Exception {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = null;// inicia transacao como nula
try {
transacao = sessao.beginTransaction();// abrindo a transacao
sessao.update(perfil);// salva dados do perfil
transacao.commit();// confirmando transacao
} catch (RuntimeException ex) {
if (transacao != null) {
transacao.rollback();
}
throw ex;
}
finally {
sessao.close();
}
}
}
*************** configuração hibernate ********************
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- configuracao de Conexao com o babco de dados -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/testepatrimonial</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- gerenciamento -->
<property name="current_session_context_class">thread</property>
<!-- desabilita o cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- exige comandos sql -->
<property name="show_sql">true</property>
<!-- criacao das tabelas -->
<property name="hbm2ddl.auto">update</property>
<property name="hbm2ddl.auto">validate</property>
<mapping class="br.com.teste.domain.Usuario"/>
<mapping class="br.com.teste.domain.Perfil"/>
</session-factory>
</hibernate-configuration>