Problemas ao Cadastrar com Hibernate
Olá Pessoal, Estou com um problema ao cadastrar um objeto no bancado através do hibernate, quero cadastrar os dados da empresa na tabela empresa e os dados de usuário
na tabela usuario, só que aparece o seguinte erro:
Desde já agradeço a todos!
Entidade - Empresa
Entidade - UsuarioEmpresa
EmpresaController - método Salvar()
EmpresaDAO
UsuarioEmpresaDao
na tabela usuario, só que aparece o seguinte erro:
java.lang.Integer cannot be cast to br.com.tecrh.cadastro.entities.Empresas
eu não consigo achar uma solução, se alguém souber de uma, por favor me responda pois é um trabalho da faculdade :)Desde já agradeço a todos!
Entidade - Empresa
// imports
@Entity
public class Empresas {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idEmpresa;
@Column(nullable = false)
private int idEstado;
@Column
private String razaoSocial;
@Column
private String nomeFantasia;
@Column
private String cnpj;
@Column
private String inscricaoEstadual;
@Column
private String endereco;
@Column
private String numero;
@Column
private String complemento;
@Column
private String cep;
@Column
private String bairro;
@Column
private String cidade;
@Column
private String email;
@Column
private String telefone;
@Column
private String celular;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "idEstado", referencedColumnName = "idEstado", insertable = false, updatable = false)
private Estado estado;
// getters and setters
Entidade - UsuarioEmpresa
//imports
@Entity
public class UsuarioEmpresa implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idUsuEmpresa;
@Column
private Integer idEmpresa;
@Column
private String login;
@Column
private String senha;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "idEmpresa", referencedColumnName = "idEmpresa", insertable = false, updatable = false)
private Empresas empresa;
// getters and setters
EmpresaController - método Salvar()
public class EmpresaController {
private Empresas empresas = new Empresas();
private UsuarioEmpresa usuarioEmpresa = new UsuarioEmpresa();
private Estado estado = new Estado();
private DataModel<Empresas> empresa;
private DataModel<Estado> estados;
private String msg;
private String msgError = "";
public String salvar() throws Exception {
EmpresaDao dao = new EmpresaDao();
UsuarioEmpresaDao userDao = new UsuarioEmpresaDao();
if (this.empresas.getIdEmpresa() == 0) {
try {
Empresas empresa = dao.save(empresas);
usuarioEmpresa.setEmpresa(empresa);
userDao.save(usuarioEmpresa);
this.msg = "Empresa cadastrada com sucesso! Efetue o login.";
return "loginUsuario";
} catch (Exception e) {
this.msgError = "Falha ao cadastrar empresa: " + e.getMessage();
e.printStackTrace();
}
} else {
try {
dao.update(empresas);
this.msg = "Alteração realizada com sucesso!";
} catch (Exception e) {
this.msgError = "Falha na alteração: " + e.getMessage();
e.printStackTrace();
}
}
this.empresas = new Empresas();
this.empresa = null;
return null;
}
// getters and setters
EmpresaDAO
public class EmpresaDao {
private Session session = HibernateSession.getSession();
public Empresas save(Empresas entity) throws Exception {
try {
session.beginTransaction();
Empresas empresa = (Empresas) session.save(entity);
session.getTransaction().commit();
return empresa;
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
throw e;
}
}
}
UsuarioEmpresaDao
public String salvar() throws Exception {
EmpresaDao dao = new EmpresaDao();
UsuarioEmpresaDao userDao = new UsuarioEmpresaDao();
if (this.empresas.getIdEmpresa() == 0) {
try {
Empresas empresa = dao.save(empresas);
usuarioEmpresa.setEmpresa(empresa);
userDao.save(usuarioEmpresa);
this.msg = "Empresa cadastrada com sucesso! Efetue o login.";
return "loginUsuario";
} catch (Exception e) {
this.msgError = "Falha ao cadastrar empresa: " + e.getMessage();
e.printStackTrace();
}
} else {
try {
dao.update(empresas);
this.msg = "Alteração realizada com sucesso!";
} catch (Exception e) {
this.msgError = "Falha na alteração: " + e.getMessage();
e.printStackTrace();
}
}
this.empresas = new Empresas();
this.empresa = null;
return null;
}
}
Josivan Soares
Curtidas 0
Melhor post
Ronaldo Lanhellas
04/06/2015
Creio que o código da classe UsuarioEmpresaDao não seja esse, não encontrei o método save() nela. Checa e mude o código aqui no fórum.
GOSTEI 1
Mais Respostas
Ronaldo Lanhellas
04/06/2015
Creio que o código da classe UsuarioEmpresaDao não seja esse, não encontrei o método save() nela. Checa e mude o código aqui no fórum.
GOSTEI 0
Josivan Soares
04/06/2015
Desculpe pessoal, mandei o código errado no usuarioEmpresaDAO segue o correto.
UsuarioEmpresaDAO
UsuarioEmpresaDAO
public class UsuarioEmpresaDao {
private Session session = HibernateSession.getSession();
public void save(UsuarioEmpresa entity) throws Exception {
try {
session.beginTransaction();
session.save(entity);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
throw e;
}
}
public void update(UsuarioEmpresa entity) throws Exception {
try {
session.beginTransaction();
session.update(entity);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
throw e;
}
}
}
GOSTEI 0
Ronaldo Lanhellas
04/06/2015
A sua classe UsuarioEmpresa já tem um erro semântico, se você tem a propriedade "empresa" não precisa criar a propriedade idEmpresa, o hibernate faz isso para você.
Assim :
Outra coisa, não usamos nome de entidade no plural , o certo é Empresa.class e não Empresas.class
Assim :
//imports
@Entity
public class UsuarioEmpresa implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idUsuEmpresa;
@Column
private String login;
@Column
private String senha;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "idEmpresa")
private Empresas empresa;
// getters and setters
Outra coisa, não usamos nome de entidade no plural , o certo é Empresa.class e não Empresas.class
GOSTEI 1
Josivan Soares
04/06/2015
A sua classe UsuarioEmpresa já tem um erro semântico, se você tem a propriedade "empresa" não precisa criar a propriedade idEmpresa, o hibernate faz isso para você.
Assim :
Outra coisa, não usamos nome de entidade no plural , o certo é Empresa.class e não Empresas.class
Assim :
//imports
@Entity
public class UsuarioEmpresa implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idUsuEmpresa;
@Column
private String login;
@Column
private String senha;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "idEmpresa")
private Empresas empresa;
// getters and setters
Outra coisa, não usamos nome de entidade no plural , o certo é Empresa.class e não Empresas.class
Então Ronaldo, em relação a entidade estar com o nome incoerente, eu percebi, mas como é um trabalho de faculdade onde outras pessoas estão mexendo aí não modifiquei, mas darei um toque no pessoal sim e muito obrigado por observar isso, continuando, eu apaguei esse Integer, mas mesmo assim não consegue cadastrar da o mesmo erro, eu acredito que seja problema na hora de converter o retorno do save() nessa parte do código:
EmpresaDAO
Empresas empresa = (Empresas) session.save(entity);
Tento pegar esse retorno no controller
Empresas empresa = dao.save(empresas); // tento pegar o retorno
usuarioEmpresa.setEmpresa(empresa); // seto a empresa pra preencher o idEmpresa na classe UsuarioEmpresa
userDao.save(usuarioEmpresa); // e por fim tento cadastrar
Mas ao fazer isso me da aquele erro
java.lang.Integer cannot be cast to br.com.tecrh.cadastro.entities.Empresas
GOSTEI 0
Josivan Soares
04/06/2015
Consegui Resolver o Problema, eu li na especificação do hibernate e vi que o save() retorna um inteiro, como eu estava esperando um objeto por não saber disso, fiz da forma errada fazendo cast pra Empresa, então fiz a seguinte mudaça:
Mudança no DAO de Empresa:
Mudança no salvar do Controller, o restante das linhas continuam:
Obrigado reservar um pouco do seu tempo pra me ajudar!
espero que esse tópico ajude mais alguém :)
Abraço!
Mudança no DAO de Empresa:
public Integer save(Empresa entity) throws Exception {
try {
session.beginTransaction();
Integer empresaID = (Integer) session.save(entity); //
session.getTransaction().commit();
return empresaID;
Mudança no salvar do Controller, o restante das linhas continuam:
public String salvar() throws Exception {
EmpresaDao dao = new EmpresaDao();
UsuarioEmpresaDao userDao = new UsuarioEmpresaDao();
if (this.empresa.getIdEmpresa() == 0) {
try {
Integer IdEmpresa = dao.save(empresa); // pego integer que o save() retorna e coloco em idEmpresa
Empresa empresa = new Empresa();
empresa.setIdEmpresa(IdEmpresa); // seto o IdEmpresa e atribuo o id de retorno do save()
usuarioEmpresa.setEmpresa(empresa); // agora pego a empresa com o id preenchido com o inteiro setando a joinColumn Empresa do UsuarioEmpresa
userDao.save(usuarioEmpresa); // agora mando salvar o usuarioEmpresa com o empresa preenchido com o id retornado do save()
this.msg = "Empresa cadastrada com sucesso! Efetue o login.";
return "loginUsuario";
} catch (Exception e) {
this.msgError = "Falha ao cadastrar empresa: " + e.getMessage();
e.printStackTrace();
}else{
.................
}
}
Obrigado reservar um pouco do seu tempo pra me ajudar!
espero que esse tópico ajude mais alguém :)
Abraço!
GOSTEI 0