Cómo crear Criterios en el campo que puede ser null?

Tengo que crear Criterios o Criterio en el campo específico myProperity (en clase Miclase). Tengo que elegir todos los objetos que han prop = null o satisfacer Criterios específicos. Entonces debo hacer algo como:

Criteria criteria = this.sessionManager.getCurrentSession().createCriteria(MyClass.class);

specificCriteria = criteria.createCriteria('myProperity');
/* definition of specificCriteria */

Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.isNull('myProperity'));
disjunction.add(specificCriteria);

criteria.add(disjunction);

El problema es causada ser los hechos:

  1. No puedo agregar Criterios a la Disyunción (a la Disyunción, solo se puede agregar un Criterio), por lo que la línea: la disyunción.agregar(specificCriteria); está mal
  2. Yo no puedo de alguna manera modificar la specificCriteria, para aceptar null porque no puedo hacer que los criterios en null. (Me da NullPointerException)

Tienes alguna Idea de cómo lidiar con ella?

  • Una disyunción es un criterio, de modo que usted puede agregar a un criterio.
  • Sí, he echado en falta una línea: criterios.agregar(disyunción); pero no es el caso.
  • el problema es que no puedo agregar Criterios disyunción: la disyunción.agregar(specificCriteria);
InformationsquelleAutor M314 | 2012-03-28

5 Kommentare

  1. 10

    Usted puede obtener la respuesta de todas las preguntas aquí
    esto le ayudará a

    para ex si su Miclase como

    class MyClass{
       private long id;
       private String myProperity;
       .
       .
       .
       setter & getter
    }

    aquí null problema está resuelto y que esto va a oring con otros criterios.

    Criteria criteria = session.createCriteria(MyClass.class);
    
    Disjunction disjunction = Restrictions.disjunction();
    disjunction.add(Restrictions.isNull("myProperity"));
    
    criteria.add(disjunction);
    
    criteria.add(Restrictions.eq("id", value));
  2. 7

    Sólo para que nadie con esta pregunta. Yo tenía un problema similar donde quería comprobar si un asociado de la colección estaba vacía y si no restringir por ID. Para lograr esto, el siguiente me ayudó (código actualizado para la versión más reciente de la hibernación):

    Criteria criteria = getSession().createCriteria(StaffMember.class);
    criteria.createAlias("franchises", "franchises", JoinType.LEFT_OUTER_JOIN)
            .add(Restrictions.or(
                    Restrictions.isEmpty("franchises"),
                    Restrictions.in("franchises.id", allowedFranchises)));

    Así que esto permite a los siguientes:

    1. los miembros del personal con ninguna de las franquicias de
    2. miembros del personal que están en una franquicia con un ID de allowedFranchises colección
  3. 6

    Algo como esto me ayudó:

    final Criteria c = session.createCriteria(House.class)
        //Houses may not have doors.
        .createAlias("door", "door", CriteriaSpecification.LEFT_JOIN)
        //Door may be null, but if it isn't it must be blue.
        .add(Restrictions.or(Restrictions.isNull("door"), Restrictions.eq("door.color", "blue")));

    Esta respuesta me ayudó: https://stackoverflow.com/a/2208458

    • Esta es la respuesta al uso de Hibernate 3, CriteriaSpecification existe donde como JoinType no.
  4. 1

    Comprobar si el valor proporcionado en criteria es null por cheque isNull y se aplican a su criteria de la siguiente

    criteria.add(Restrictions.isNull("parentId"));

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea