Aonde está o erro? Hibernate

O que esta errado aqui??

Criteria ct = gd.getSession().createCriteria(CidadeBean.class);
ct.createAlias("uf", "uff");
ct.add(Restrictions.eq("uff.nomUf", "Alagoas"));

Caused by: java.sql.SQLException: ORA-00904: “UFF1_”.“NOM_UF”: identificador inválido

select

this_.cod_usuario_alteracao as cod12_7_0_,
this_.ind_bloqueado as ind13_7_0_
from
admin.tb_cidade this_
where
uff1_.nom_uf=?

Pq o hibernate nao faz o join entre as tabelas?? Meu relacionamento esta certo, o mapemaneto tbm. Se eu fiz essa consulta via hql funciona, pq via criteria nao? :confused: Help

Pelo que vi aí… o uff1_.nom_uf não existe…ou voce não declarou ele no select

posta sua CidadeBean.
qual é sua classe persistente? é CidadeBean ou ela é um Bean?
ta meio confuso isso.

valew

Você precisa criar uma subCriteria:

Criteria ct = gd.getSession().createCriteria(CidadeBean.class).createCriteria("uf"); ct.add(Restrictions.eq("nomUf", "Alagoas"));Acho que assim vai funcionar, testa ae depois fala se resolveu.

Flw! :thumbup:

CidadeBean tem relacionamento com UfBean. uf é um atributo many to one de cidadebean, o que quero é consultar cidade bean pelo nome da uf, ai o hibernate simplemente procura nom_uf em cidadebean, mais deveria procurar em ufbean, que eh dela q pertence. realmmente nom_uf nao eh de cidadebean, eh de ufbean, mais o burro do hibernate nao faz o join na consulta, sera isso um bug?

von.juliano

funcionou tbm nao, na api do hibernate essa eh exatamente a segunda opcao para esse tipo de consulta, mais tbm nao funcionou

mateusprado

Tai o CidadeBean

 <class name="br.com.erpofm.bean.CidadeBean" table="admin.tb_cidade" lazy="true">
           
        <comment>Tabela de Cidades</comment>
        
		<composite-id> 
        	<key-property column="cod_cidade" name="codCidade" type="integer" />            
        	<key-many-to-one name="uf" class="br.com.erpofm.bean.UfBean">
        		<column name="cod_uf" />
        	</key-many-to-one>
        </composite-id>
....

agora sera q esse problema eh por uf ser um compisite id?

Hummmm, percebi que é pq eh um compisite id. E agora, qual sera a solucao?

Engraçado, eu testei com uma classe aqui nas mesmas condições e funcionou. Posta o erro que gera com a alteração que eu escrevi acima, e o select que o hibernate gera.

Flw! :thumbup:

von.juliano

Realmente funciona, so nao esta funcionando quando o relacionamento eh key-many-to-one, ou seja, eh uma chave composta.

CidadeBean é composta de codCidade e uf(key-many-to-one)
Quando eu tento fazer o criteria na uf, ele da pau, agora se eh um relacionamento simples(many-to-one) funciona.

Hibernate: 
    select
        this_.cod_cidade as cod1_7_0_,
        this_.cod_uf as cod2_7_0_,
        this_.cod_usuario_criacao as cod3_7_0_,
        this_.nom_cidade as nom4_7_0_,
        this_.cod_fornecedor_prefeitura as cod5_7_0_,
        this_.num_cep_padrao as num6_7_0_,
        this_.num_cidade_inscricao_estadual as num7_7_0_,
        this_.pct_aliquota_iss as pct8_7_0_,
        this_.num_dia_vencimento_iss as num9_7_0_,
        this_.ind_area_abrangencia as ind10_7_0_,
        this_.dth_criacao as dth11_7_0_,
        this_.cod_usuario_alteracao as cod12_7_0_,
        this_.ind_bloqueado as ind13_7_0_ 
    from
        admin.tb_cidade this_ 
    where
        uff1_.nom_uf=?
14:22:19,859  WARN JDBCExceptionReporter:77 - SQL Error: 904, SQLState: 42000
14:22:19,859 ERROR JDBCExceptionReporter:78 - ORA-00904: "UFF1_"."NOM_UF": identificador inválido

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2213)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2107)
	at org.hibernate.loader.Loader.list(Loader.java:2102)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	at br.com.erpofm.utils.Utils.main(Utils.java:36)
Caused by: java.sql.SQLException: ORA-00904: "UFF1_"."NOM_UF": identificador inválido

	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:810)
	at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
	at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:850)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1134)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3384)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1790)
	at org.hibernate.loader.Loader.doQuery(Loader.java:674)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.doList(Loader.java:2210)
	... 6 more