Pablo Masoero
Pablo Masoero

Reputation: 1

Hibernate restriction + projection org.hibernate.QueryException: could not resolve property

when applying a restriction to a field in a projection I'm having the following exception:

org.hibernate.QueryException: could not resolve property: surcursal of: com.adm_colas.model.AnalisisColas at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83) at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77) at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1978) at org.hibernate.loader.criteria.EntityCriteriaInfoProvider.getType(EntityCriteriaInfoProvider.java:57) at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathInfo(CriteriaQueryTranslator.java:245) at org.hibernate.loader.criteria.CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:229) at org.hibernate.loader.criteria.CriteriaQueryTranslator.(CriteriaQueryTranslator.java:112) at org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:88) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1663) at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:402) at com.adm_colas.dao.AnalisisColasDAOImpl.getSumGroupBy(AnalisisColasDAOImpl.java:121)

This is the class I'm querying:

 @Entity
 @Table(name = "analisis_colas", catalog = "colas")
 public class AnalisisColas implements java.io.Serializable {
/**
 * 
 */
private static final long serialVersionUID = 1L;

private Integer id;
private Date fecha;
private Sucursales sucursal;
private String dia;
private Double semana;
private Integer mes;
private String turno;
private Turnos turnoSucursal;
private Timestamp horaDesde;
private Double tasaEntrada;
private Double clientesNoAtendidos;
private Double tasaServicio;
private Date tiempoEsperaPromedio;
private Timestamp tiempoServicioPromedio;
private Timestamp tiempoTotalPromedio;
private Double tiempoTotalPromedioDec;
private Timestamp maximoTiempoEspera;
private Timestamp maximoTiempoServicio;
private Timestamp horaHasta;
private Double utilizacion;
private Double probSistemaVacio;
private Double probabilidadClienteEsper;
private Double nivelServicioActual;

And this is the code which is cracking my head:

 public List<AnalisisColas> getGroupBy(AnalisisColas a) {
    Session session = this.sessionFactory.getCurrentSession();
    Criteria criteria = session.createCriteria(AnalisisColas.class);

    criteria.setProjection(
            Projections
                    .projectionList()
                    .add(Projections.groupProperty("sucursal"), "sucursal")
                    .add(Projections.groupProperty("dia"), "dia")
                    .add(Projections.groupProperty("semana"), "semana")
                    .add(Projections.groupProperty("mes"), "mes")
                    .add(Projections.groupProperty("turnoSucursal"),
                            "turnoSucursal")
                    .add(Projections.avg("tasaEntrada"), "tasaEntrada")
                    .add(Projections.avg("tasaServicio"), "tasaServicio"))
            .setResultTransformer(
                    Transformers.aliasToBean(AnalisisColas.class));

    if (a.getSucursal() != null) {
        criteria.createAlias("surcursal", "s").add(
                Restrictions.like("s.nombre", a.getSucursal().getNombre()));
    }
    if (a.getMes() != null) {
        criteria.add(Restrictions.eq("mes", a.getMes()));
    }
    if (a.getSemana() != null) {
        criteria.add(Restrictions.eq("semana", a.getSemana()));
    }
    if (a.getDia() != null) {
        criteria.add(Restrictions.eq("dia", a.getDia()));
    }
    if (a.getTurnoSucursal() != null) {
        criteria.createAlias("turnoSucursal", "ts").add(
                Restrictions.eq("ts.turnoId", a.getTurnoSucursal()
                        .getTurnoId()));
    }
    List<AnalisisColas> analisisColasList = criteria.list();
    return analisisColasList;
}

Any ideas will be appreciated.

Upvotes: 0

Views: 959

Answers (1)

Radim K&#246;hler
Radim K&#246;hler

Reputation: 123861

Not sure about the Spanish names, i.e. about the meaning.. but Hibernate message is pretty clear:

could not resolve property: surcursal of: com.adm_colas.model.AnalisisColas

See the word surcursal, mostly the beginning sur...

While your entity is

public class AnalisisColas implements java.io.Serializable {
...
private Sucursales sucursal;

The name is: sucursal, mostly the beginning suc...

So, this part of the query is wrong:

if (a.getSucursal() != null) {    
    // here SUR... instead of SUC...
    criteria.createAlias("surcursal", "s").add( 
            Restrictions.like("s.nombre", a.getSucursal().getNombre()));

Upvotes: 1

Related Questions