Problemas ao Cadastrar com Hibernate

Java

04/06/2015

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:
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

Josivan Soares

Curtidas 0

Melhor post

Ronaldo Lanhellas

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

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

Josivan Soares

04/06/2015

Desculpe pessoal, mandei o código errado no usuarioEmpresaDAO segue o correto.

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

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 :
//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

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 :
//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

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:
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
POSTAR