Hibernate + Criteria

Boa tarde galera. Estou com um problema com meu código de persistência. Quando tento executar ele me retorna um erro e não sei com resolver, já procurei nos vales mais sombrios da internet e nada ‘-’

O meu DAO é esse. Quero que ele busque a pessoa proprietária da empresa através do código da mesma.

@SuppressWarnings({ "unchecked"})
	public Pessoa buscarPorEmpresa(Long empresaCodigo) {
		Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
		try {
			
			Criteria c = sessao.createCriteria(Pessoa.class, "P");
			c.createAlias("empresa", "e");
			c.add(Restrictions.eq("P.codigo", "e.pessoa_codigo"));
			c.add(Restrictions.eq("e.codigo", empresaCodigo));
			
			
			Pessoa resultado = (Pessoa) c.uniqueResult(); 
			
			return resultado;
		} catch (RuntimeException erro) {
			throw erro;
		} finally {
			sessao.close();
		}
	}

Essa é minha classe Pessoa

    @Entity
public class Pessoa extends GenericDomain {
	@Column(length = 50, nullable = false)
	private String nome;
	
	@Column(length = 14, nullable = false)
	private String cpf;
	
	@Column(length = 12, nullable = false)
	private String rg;
	
	@Column(length = 100, nullable = false)
	private String rua;
	
	@Column(nullable = false)
	private Short numero;
	
	@Column(length = 30, nullable = false)
	private String bairro;
	
	@Column(length = 10, nullable = false)
	private String cep;
	
	@Column(length = 10, nullable = false)
	private String complemento;
	
	@ManyToOne
	@JoinColumn(nullable = false)
	private Cidade cidade;
	
	@Column(length = 13, nullable = false)
	private String telefone;

	@Column(length = 14, nullable = false)
	private String celular;
	
	@Column(length = 100, nullable = false)
	private String email;
	
	@OneToOne(mappedBy = "pessoa")
	private Empresa empresa;

	@OneToOne(mappedBy = "pessoa")
	private Usuario usuario;
	
	public String getNome() {
		return nome;
	}

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

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}
	
	public Cidade getCidade() {
		return cidade;
	}
	
	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public String getRua() {
		return rua;
	}

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

	public Short getNumero() {
		return numero;
	}

	public void setNumero(Short numero) {
		this.numero = numero;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return cep;
	}

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

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getTelefone() {
		return telefone;
	}

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

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
	public Empresa getEmpresa() {
		return empresa;
	}
	
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
}

essa a classe Empresa

@Entity

@Table(name = “empresa”)
public class Empresa extends GenericDomain{

@Column(length = 50, nullable = false)
private String nome;

@Column(length = 100, nullable = false)
private String endereco;

@Column(length = 50, nullable = false)
private String bairro;

@Column(length = 13, nullable = false)
private String telefone;

@Column(length = 20, nullable = false)
private String cnpj;

@Column(length = 20, nullable = false)
private String insc_estadual;

@Column(length = 20, nullable = false)
private String insc_municipal;

@Column(length = 100, nullable = false)
private String contato;

@Column(length = 50, nullable = false)
private String email;

@Column(nullable = false)
private Character tipo;

@Column(nullable = false)
private Boolean ativo;

@OneToOne
@JoinColumn(nullable = false)
private Pessoa pessoa;

@ManyToOne
@JoinColumn(nullable = false)
private Cidade cidade;

public String getBairro() {
	return bairro;
}

public void setBairro(String bairro) {
	this.bairro = bairro;
}

public Cidade getCidade() {
	return cidade;
}

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

public String getCnpj() {
	return cnpj;
}

public void setCnpj(String cnpj) {
	this.cnpj = cnpj;
}

public String getContato() {
	return contato;
}

public void setContato(String contato) {
	this.contato = contato;
}

public String getEmail() {
	return email;
}

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

public String getEndereco() {
	return endereco;
}

public void setEndereco(String endereco) {
	this.endereco = endereco;
}

public String getInsc_estadual() {
	return insc_estadual;
}

public void setInsc_estadual(String insc_estadual) {
	this.insc_estadual = insc_estadual;
}

public String getInsc_municipal() {
	return insc_municipal;
}

public void setInsc_municipal(String insc_municipal) {
	this.insc_municipal = insc_municipal;
}

public String getNome() {
	return nome;
}

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

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

public Character getTipo() {
	return tipo;
}

public Pessoa getPessoa() {
	return pessoa;
}

public void setPessoa(Pessoa pessoa) {
	this.pessoa = pessoa;
}

@Transient
public String getTipoFormatado() {
	String tipoFormatado = null;
	
	if(tipo == 'A') {
		tipoFormatado = "Administrador";
	}else if(tipo == 'B') {
		tipoFormatado = "Balconista";
	}else if(tipo == 'G') {
		tipoFormatado = "Gerente";
	}
	return tipoFormatado;
}

public void setTipo(Character tipo) {
	this.tipo = tipo;
}

public Boolean getAtivo() {
	return ativo;
}

public String getAtivoFormatado() {
	String ativoFormatado = "Não";
	if(ativo) {
		ativoFormatado = "Sim";
	}
	return ativoFormatado;
}

public void setAtivo(Boolean ativo) {
	this.ativo = ativo;
}

}

Erro:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36)
at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:63)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:281)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1995)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1966)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1901)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839)
at org.hibernate.loader.Loader.doQuery(Loader.java:910)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355)
at org.hibernate.loader.Loader.doList(Loader.java:2554)
at org.hibernate.loader.Loader.doList(Loader.java:2540)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)
at org.hibernate.loader.Loader.list(Loader.java:2365)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1718)
at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)
at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:402)
at br.com.riverp.dao.PessoaDAO.buscarPorEmpresa(PessoaDAO.java:33)
at br.com.riverp.Bean.UsuarioBean.popular(UsuarioBean.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at org.primefaces.behavior.ajax.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxBehaviorListenerImpl.java:54)
at javax.faces.event.AjaxBehaviorEvent.processListener(AjaxBehaviorEvent.java:113)
at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:106)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:805)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

Alguém pode me ajudar? Desde já agradeço

Ah cara você tem que debuggar para ver onde está dando erro e porque;

Pessoa resultado = (Pessoa) c.uniqueResult();  

nessa linha

Tem algum valor sendo retornado do banco, que o Hibernate entende que é uma String, e que está tentando atribuir à uma variável Long.

Verifique os tipos das colunas no banco e veja se o mapeamento nas classes está de acordo.

Verifiquei todas as colunas e todas as linhas das classes mas tudo está correto… Não sei mais o que fazer.

Você não conseguiria dar uma olhada pra eu via TeamViewer ? eu te pago

1 curtida

Amigo cuidado com essa limitacao da variavel.

Oi?

Esse é o resultado da depuração

Faça assim. Comente todos os campos mapeados e deixe somente 1 e teste. Veja se dá erro. Vai descomentando os campos até encontrar o campo que está quebrando tudo.

Cara, meio que descobri o erro. Porém to acertando tudo aqui pra postar a resolução.
O Fato é que a UML que eu montei da primeira vez tava todaaaaa errada, minha professora teria um infarto ao ver isso. Ai refiz a UML e estou mapeando tudo novamente. O Erro tava claro e eu tava insistindo na burrice.

A UML tava assim: (Todo errado, desconsiderem a falta de atenção)

Agora esta assim:

Se estou errando em mais algo por favor me avisem, toda ajuda é bem vinda.
Esse erro se deu pois UML, não é minha área, sempre fui do Back-end e esse ta sendo o segundo projeto que estou trabalhando depois de formado. E por falta de dinheiro não posso aprimorar meus recursos com contratação de profissionais.
Mas agora estou confiante. Vai dar certo!