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?
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