Hql e Criteria

Como eu faço para rodar essa query usando Hibernate? Do jeito que tá, tá dando erro de token desconhecido(on) ele não aceita o ON do join, porque isso não é HQL e como é Hibernate, ele dá erro. Isso é meu aprendizado e meu trampo ao mesmo tempo e a portya da rua já tá aberta.

public List<Escola> findAll() { Query query = getEntityManager().createQuery("select distinct e.nome " + "from " + "pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " + "inner join matricula m on (m.idprofessor = f.idprofessor) " + "inner join escola e on (e.idescola = m.idescola)" + "where m.situacao = 'A'"); return (List<Escola>) query.getResultList(); }

porque nu tenta fazer simplesmente o seguinte:

("select distinct e.nome from " +      
  "pessoa p, professor f, mtricula m, escola e " +
  "where p.idpessoa = f.idpessoa and m.idprofessor = f.idprofessor " +      
   "and e.idescola = m.idescola where m.situacao = 'A'"; 

Já fiz e dá esse erro
15:20:01,021 ERROR PARSER:33 - line 1:165: unexpected token: where

[quote=pjava]Como eu faço para rodar essa query usando Hibernate? Do jeito que tá, tá dando erro de token desconhecido(on) ele não aceita o ON do join, porque isso não é HQL e como é Hibernate, ele dá erro. Isso é meu aprendizado e meu trampo ao mesmo tempo e a portya da rua já tá aberta.

public List<Escola> findAll() { Query query = getEntityManager().createQuery("select distinct e.nome " + "from " + "pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " + "inner join matricula m on (m.idprofessor = f.idprofessor) " + "inner join escola e on (e.idescola = m.idescola)" + "where m.situacao = 'A'"); return (List<Escola>) query.getResultList(); }[/quote]

Dê um espaço antes do where, pois da forma como está ,ele ficará colado na string anterior e não será reconhecido ao ser executado.
Além disso, se você quer executar SQL nativo tem que usar o createSQLQuery ao invés do createQuery.

Sim, mas como eu uso o createSQLQuery? Se não, como não usar nativo. Tem algum tutorial por aí?

voce usa hibernate?

http://docs.jboss.org/hibernate/core/3.5/reference/pt-BR/html/objectstate.html#objectstate-querying-nativesql

desculpa, foi burrisse minha… acabei colocando 2 where na minha resposta…
agora tenta isso:

"select distinct e.nome from " + "pessoa p, professor f, mtricula m, escola e " + "where p.idpessoa = f.idpessoa and m.idprofessor = f.idprofessor " + "and e.idescola = m.idescola and m.situacao = 'A'";

Nesse select ele dá o erro de:

[quote]pessoa is not mapped [select distinct e.nome from pessoa p, professor f, mtricula m, escola e where p.idpessoa = f.idpessoa and m.idprofessor = f.idprofessor and e.idescola = m.idescola and m.situacao = ‘A’]
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:616)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:95)
at br.com.mosaicodigital.modelo.ListaEscola.findAll(ListaEscola.java:60)
at TestaTudo.main(TestaTudo.java:19)[/quote]

a classe pessoa naum esta mapeada…

Fiz esse método usando HQL.

public List<Escola> findAll() { Query query = getEntityManager().createQuery("select esc from Escola esc"); return (List<Escola>) query.getResultList(); }

Na minha página web(XHTML) eu chamo dessa forma:

<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered"> #{escl.nome} </p:dataList>

Acontece que me dá erro de que classe br.com.modelo.escola não tem o atributo nome

tenta fazer algo parecido com isso:

String hql = "select pf from ProdutoFornecedor pf where pf.produto.idProduto = ";
Query query = getSession().createQuery(hql);
return query.list();