Hibernate + Criteria

9 respostas
hibernatejava
R

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

9 Respostas

G

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

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

nessa linha

L

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.

R

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

I

Amigo cuidado com essa limitacao da variavel.

R

Oi?

R

Esse é o resultado da depuração

L

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.

R

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!

Criado 10 de junho de 2019
Ultima resposta 11 de jun. de 2019
Respostas 9
Participantes 4