Boa tarde!
Em minha classe PNR existe o um relacionamento para pnrBlocoConjunto - idem pnrQuadra - idem pnrArea.
então pnr.pnrBlocoConjunto.pnrQuadra.pnrArea.idArea retornaria, em outras situações, o id da area daquele pnr.
Porém tentando contar a quantidade de pnr que tem o idArea igual a ? é retornado o seguinte erro.
org.hibernate.QueryException: could not resolve property: pnrBlocoConjunto.pnrQuadra.pnrArea.idArea of: br.mil.siscop.model.PNR
Estou utilizando Criteria.
segue código:
public Integer qtdPNRByArea(PNRArea pnrArea) {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class)
.add( Restrictions.eq("pnrBlocoConjunto.pnrQuadra.pnrArea", pnrArea) );
criteria.setProjection(Projections.rowCount());
return ((Integer)criteria.list().get(0)).intValue();
}
Valew!
edysnipes,
Tenta assim:
public Integer qtdPNRByArea(PNRArea pnrArea) {
Session sessao = HibernateUtil.getSession();
Criteria criteria = sessao.createCriteria(PNR.class)
.add( Restrictions.eq("pnrBlocoConjunto.pnrQuadra.pnrArea.idArea", pnrArea.idArea) );
criteria.setProjection(Projections.rowCount());
return ((Integer)criteria.list().get(0)).intValue();
}
Mas a mensagem de erro informa que em pnrArea não teria esse caminho pnrBlocoConjunto.pnrQuadra.pnrArea.idArea
Você tem os gets e sets nos models corretamente?
Tenho sim! Até porque consegui resolver meu problema assim:
public Integer qtdPNRByArea2(PNRArea pnrArea) {
Session sessao = HibernateUtil.getSession();
String sql = "select count(*) from PNR where pnrBlocoConjunto.pnrQuadra.pnrArea.idArea = ?";
Integer qtd = 0;
try {
Query query = sessao.createQuery(sql);
query.setInteger(0, pnrArea.getIdArea());
return ((Long)query.list().get(0)).intValue();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
Depois irei tentar descobrir qual o problema lá.
Obrigado!
Você precisa usar o createAlias, para usar as propriedades “dentro” de outras propriedades.
criteria.createAlias("pnrBlocoConjunto.pnrQuadra", "quadra");
criteria.createAlias("quadra.pnrArea", "area");
aí então vc pode usar
"Restrictions.eq("area.idArea", pnrArea.idArea)"
[]´s