Problemas em executar SQL nativa com Hibernate. - is not mapped -

3 respostas
joaoorso

Ola pessoal do Guj…
Estou tentando executar uma sql nativa, usando hibernate.

É assim que estou testando :

package br.com.esfera.persistence;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class HibernateTeste {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		
		Session s = HibernateUtil.getSession();
		Transaction t = s.beginTransaction();
		t.begin();
		//System.out.println("Vai entrar no try");
		//try {
			String queryString = " select" +
								 " 		  florenca.t064ceplogradouro.codlogradouro064 as CodLogradouro," +
								 "        florenca.t064ceplogradouro.tipo064 as Tipologradouro," +
								 " 	      florenca.t064ceplogradouro.nome064 as logradouro,	" +
								 "        florenca.t063cepbairro.codbairro063 as CodBairro," +
								 " 		  florenca.t063cepbairro.nome063 as bairro," +
								 " 	      florenca.t062cepcidade.codcidade062 as codCidade," +
								 "        florenca.t062cepcidade.nome062 as cidade," +
								 " 		  florenca.t061cepuf.codestado061 as codUF," +
								 " 		  florenca.t061cepuf.nome061 as UF," +
								 " 		  florenca.t060ceppais.codpais060 as codPais," +
								 " 		  florenca.t060ceppais.nome060 as Pais" +
								 " from" +
								 "        t064ceplogradouro," +
								 "        t063cepbairro," +
								 "        t062cepcidade," +
								 " 		  t061cepuf," +
								 " 		  t060ceppais" +
								 " where" +
								 "         numcep064 = '81930340'" +
								 "    and" +
								 " 		  florenca.t064ceplogradouro.codcidade062 = florenca.t062cepcidade.codcidade062" +
								 "    and" +
								 " 		  florenca.t064ceplogradouro.codbairroinicial063 = florenca.t063cepbairro.codbairro063" +
								 "    and" +
								 " 		  florenca.t064ceplogradouro.codbairrofinal063 = florenca.t063cepbairro.codbairro063" +
								 "    and " +
								 " 		  florenca.t063cepbairro.codcidade062 = florenca.t062cepcidade.codcidade062" +
								 "    and" +
								 " 		  florenca.t062cepcidade.codestado061 = florenca.t061cepuf.codestado061" +
								 "    and" +
								 " 		  florenca.t062cepcidade.codpais060 = florenca.t060ceppais.codpais060" +
								 "    and" +
								 " 		  florenca.t061cepuf.codpais060 = florenca.t060ceppais.codpais060";
		 	
			Query queryObject = s.createQuery(queryString);
			//queryObject.setParameter(0, "81930646");
			List<?> resultList = queryObject.list();
			t.commit();
			System.out.println("Vai .... "+ resultList.toString());
			
		//} catch (Exception e) {
		//	System.out.println("Caiu no catch");
			t.rollback();
		//}

		
		s.close();
	}
}

E está dando esse erro :

INFO: Not binding factory to JNDI, no JNDI name configured
Vai entrar no try
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: t064ceplogradouro is not mapped [ select 		  florenca.t064ceplogradouro.codlogradouro064 as CodLogradouro,        florenca.t064ceplogradouro.tipo064 as Tipologradouro, 	      florenca.t064ceplogradouro.nome064 as logradouro,	        florenca.t063cepbairro.codbairro063 as CodBairro, 		  florenca.t063cepbairro.nome063 as bairro, 	      florenca.t062cepcidade.codcidade062 as codCidade,        florenca.t062cepcidade.nome062 as cidade, 		  florenca.t061cepuf.codestado061 as codUF, 		  florenca.t061cepuf.nome061 as UF, 		  florenca.t060ceppais.codpais060 as codPais, 		  florenca.t060ceppais.nome060 as Pais from        t064ceplogradouro,        t063cepbairro,        t062cepcidade, 		  t061cepuf, 		  t060ceppais where         numcep064 = '81930340'    and 		  florenca.t064ceplogradouro.codcidade062 = florenca.t062cepcidade.codcidade062    and 		  florenca.t064ceplogradouro.codbairroinicial063 = florenca.t063cepbairro.codbairro063    and 		  florenca.t064ceplogradouro.codbairrofinal063 = florenca.t063cepbairro.codbairro063    and  		  florenca.t063cepbairro.codcidade062 = florenca.t062cepcidade.codcidade062    and 		  florenca.t062cepcidade.codestado061 = florenca.t061cepuf.codestado061    and 		  florenca.t062cepcidade.codpais060 = florenca.t060ceppais.codpais060    and 		  florenca.t061cepuf.codpais060 = florenca.t060ceppais.codpais060]
	at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
	at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
	at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
	at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:277)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
	at br.com.esfera.persistence.HibernateTeste.main(HibernateTeste.java:57)

Só que estou mapeando a tabela (t064ceplogradouro )sim … olhem :

package br.com.esfera.model.cadastro.vo;

import java.util.Date;

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.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import br.com.esfera.model.vo.VO;

/**
 * Display Administração - T064
 * @author João Ricardo.
 */


@Entity
             
@Table(name="t064ceplogradouro", schema="florenca")
public class CepLogradouroVO extends VO {
	
	@Transient	
	private static final long serialVersionUID = -1225292023711555680L;

	@Id
	@SequenceGenerator(name="id", sequenceName="florenca.seq_t064")
	@GeneratedValue(strategy=GenerationType.AUTO, generator="id")
	@Column(name="codlogradouro064", nullable=false)
	private Integer codLogradouro;
	
	/*
	@OneToOne(fetch=FetchType.LAZY)
	@PrimaryKeyJoinColumn
	private CepCidadeVO cidade; 
	
	@OneToOne(fetch=FetchType.LAZY)
	@PrimaryKeyJoinColumn
	private CepBairroVO bairroInicial;
	
	@OneToOne(fetch=FetchType.LAZY)
	@PrimaryKeyJoinColumn
	private CepBairroVO bairroFinal;
	*/
	
	@Column(name="codcidade062", nullable = false)
	private Integer codCidade;
	
	@Column(name="codbairroinicial063")
	private Integer codBairroInicial;
	
	@Column(name="codbairrofinal063")
	private Integer codBairroFinal;
	
	@Column(name="nome064",length=70, nullable=false)
	private String nome;
	
	@Column(name="numcep064",length=8, nullable=false)
	private String numeroCep;
	
	@Column(name="complemento064",length=50)
	private String complemento;
	
	@Column(name="tipo064", length=30)
	private String tipo;
	
	@Column(name="logdtacriacao")
	@Temporal(TemporalType.TIMESTAMP)
	private Date logDtaCriacao;
	
	@Column(name="logdtaedicao")
	@Temporal(TemporalType.TIMESTAMP)
	private Date logDtaEdicao;
	
	@Column(name="logUsuario", length=20, nullable=false)
	private String logUsuario;

	public Integer getCodLogradouro() {
		return codLogradouro;
	}

	public void setCodLogradouro(Integer codLogradouro) {
		this.codLogradouro = codLogradouro;
	}

	public Integer getCodCidade() {
		return codCidade;
	}

	public void setCodCidade(Integer codCidade) {
		this.codCidade = codCidade;
	}

	public Integer getCodBairroInicial() {
		return codBairroInicial;
	}

	public void setCodBairroInicial(Integer codBairroInicial) {
		this.codBairroInicial = codBairroInicial;
	}

	public Integer getCodBairroFinal() {
		return codBairroFinal;
	}

	public void setCodBairroFinal(Integer codBairroFinal) {
		this.codBairroFinal = codBairroFinal;
	}

	public String getNome() {
		return nome;
	}

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

	public String getNumeroCep() {
		return numeroCep;
	}

	public void setNumeroCep(String numeroCep) {
		this.numeroCep = numeroCep;
	}

	public String getComplemento() {
		return complemento;
	}

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

	public String getTipo() {
		return tipo;
	}

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

	public Date getLogDtaCriacao() {
		return logDtaCriacao;
	}

	public void setLogDtaCriacao(Date logDtaCriacao) {
		this.logDtaCriacao = logDtaCriacao;
	}

	public Date getLogDtaEdicao() {
		return logDtaEdicao;
	}

	public void setLogDtaEdicao(Date logDtaEdicao) {
		this.logDtaEdicao = logDtaEdicao;
	}

	public String getLogUsuario() {
		return logUsuario;
	}

	public void setLogUsuario(String logUsuario) {
		this.logUsuario = logUsuario;
	}

	
}

Por favor … a
lguém me ajude …
Obrigado !!

3 Respostas

faelcavalcanti

este erro acontece quando você inicia a aplicação, provavelmente ela esteja corretamente mapeada, mas procure verificar todas as classes que ela se relaciona.

neste caso faca o seguinte, corte todos os relacionamentos que esta sua classe, t064ceplogradouro, possui de forma a testar indivualmente e aos poucos cada parte, porque senao vc nao conseguira rodar nada.

joaoorso

Obrigado pelo post faelcavalcanti , mas dessa vez tive que me vira sozinho :frowning:
não me pergunte pq …
mas assim deu certo :
Tô colocando a resposta aí né … vai que alguém passa por um problema parecido …

Abrax ! !!!

package br.com.esfera.model.entidade.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import br.com.esfera.model.entidade.vo.EnderecoVO;
import br.com.esfera.persistence.DAO;
import br.com.esfera.persistence.HibernateUtil;


public class EnderecoDAO extends DAO<EnderecoVO>{
	
	
	@SuppressWarnings("unchecked")
	public List<EnderecoVO> getListaEnderecosPorCEP(String cep){
		/* 
		 * Retorna ula lista de enderecos que possui o CeP 
		 * recebido como parametro
		 * 
		 * */
		Session s = HibernateUtil.getSession();
		String sql = montaSQLConsultaEndPorCep(cep);
		
		List<Object> l = s.createSQLQuery(sql).list();		
		
		List<EnderecoVO> eList = new ArrayList<EnderecoVO>();
		
		for(int y=1; y<=l.size(); y++){
			Object [] o= (Object[]) l.get(y-1);		
			EnderecoVO e = new EnderecoVO();
			/*
			 * As linhas abaixo preenchem um ArrayList de com objetos do tipo EnderecoVO
			 * */
			e.setCodLogradouro((Integer)o[0]);
			e.setTpLogradouro((String)  o[1]);
			e.setLogradouro((String)    o[2]);
			e.setCodBairro((Integer)    o[3]);
			e.setBairro((String)        o[4]);
			e.setCodCidade((Integer)    o[5]);
			e.setCidade((String)        o[6]);
			e.setCodEstado((Integer)    o[7]);
			e.setEstado((String)        o[8]);
			e.setCodPais((Integer)      o[9]);
			e.setPais((String)          o[10]);
			
			eList.add(e);			
		}	
		s.close();
		return eList;		
	}
	
	
	
	public static String montaSQLConsultaEndPorCep(String cep){
		StringBuilder sql = new StringBuilder();		
		
		sql.append(" select");
		sql.append(" 		florenca.t064ceplogradouro.codlogradouro064 as CodLogradouro,");
		sql.append("        florenca.t064ceplogradouro.tipo064 as Tipologradouro,");
		sql.append("        florenca.t064ceplogradouro.nome064 as logradouro,	");
		sql.append("        florenca.t063cepbairro.codbairro063 as CodBairro,");
		sql.append("		florenca.t063cepbairro.nome063 as bairro,");
		sql.append("        florenca.t062cepcidade.codcidade062 as codCidade,");
		sql.append("        florenca.t062cepcidade.nome062 as cidade,");
		sql.append("		florenca.t061cepuf.codestado061 as codUF,");
		sql.append("		florenca.t061cepuf.nome061 as UF,");
		sql.append("		florenca.t060ceppais.codpais060 as codPais,");
		sql.append("		florenca.t060ceppais.nome060 as Pais");
		sql.append(" from");
		sql.append("        florenca.t064ceplogradouro,");
		sql.append("        florenca.t063cepbairro,");
		sql.append("        florenca.t062cepcidade,");
		sql.append("		florenca.t061cepuf,");
		sql.append("		florenca.t060ceppais");
		sql.append(" where");
		sql.append("         numcep064 = '"+cep+"'");
		sql.append("    and");
		sql.append(" 		  florenca.t064ceplogradouro.codcidade062 = florenca.t062cepcidade.codcidade062");
		sql.append("    and");
		sql.append(" 		  florenca.t064ceplogradouro.codbairroinicial063 = florenca.t063cepbairro.codbairro063");
		sql.append("    and");
		sql.append(" 		  florenca.t064ceplogradouro.codbairrofinal063 = florenca.t063cepbairro.codbairro063");
		sql.append("    and ");
		sql.append(" 		  florenca.t063cepbairro.codcidade062 = florenca.t062cepcidade.codcidade062");
		sql.append("    and");
		sql.append(" 		  florenca.t062cepcidade.codestado061 = florenca.t061cepuf.codestado061");
		sql.append("    and");
		sql.append(" 		  florenca.t062cepcidade.codpais060 = florenca.t060ceppais.codpais060");
		sql.append("    and");
		sql.append(" 		  florenca.t061cepuf.codpais060 = florenca.t060ceppais.codpais060");

		
		return sql.toString();		
	}


}
faelcavalcanti

blz! dá uma refatorada no código depois.

recomendo leitura abaixo

:wink:

Criado 7 de setembro de 2008
Ultima resposta 11 de set. de 2008
Respostas 3
Participantes 2