Pregunta

Me gustaría utilizar la API de Hibernate para Criterios precisamente lo que dice todo el mundo es, probablemente, su caso de uso más probable, la aplicación de criterios de búsqueda complejos. El problema es que la tabla que desea consultar en contra no está compuesto en su totalidad de los valores primitivos, pero en parte, de otros objetos, y necesito a consulta contra de los objetos de identificación.

he encontrado este artículo desde hace 2 años que sugiere que no es posible. He aquí cómo lo intenté en vano, hay otro aspecto de hibernación en el que sé de los que se admita este tipo de notación de punto dentro de la cadena para indicar anidación objeto.

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

EDIT:

Aquí está mi código correctamente factorizar para llevar a cabo lo que estaba tratando anterior, utilizando la sugerencia de la primera respuesta a continuación; en cuenta que estoy usando incluso una llamada createCriteria adicional a la orden de un atributo de otro objeto / tabla asociada:

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
¿Fue útil?

Solución

No del todo seguro de entender tu ejemplo, pero es ciertamente posible especificar las condiciones de filtro en una entidad asociada, simplemente mediante la anidación Criterios objetos para formar un árbol. Por ejemplo, si tengo una entidad llamada Solicitar con una relación muchos-a-uno a un usuario entidad, puedo encontrar todos los pedidos de un usuario llamado Fred con una consulta de esta manera:

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

Si usted está hablando de una entidad que tiene una relación consigo mismo, que debería funcionar también. También puede reemplazar "nombre" con "id" si tiene que filtrar en el ID de un objeto asociado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top