2011-05-06 13 views

Respuesta

37

IN tests es el valor de la expresión de ruta de un solo valor (atributo persistente de su entidad) en valores proporcionados a la consulta (o obtenidos a través de subconsulta).

MIEMBRO DE pruebas es el valor que ha proporcionado a la consulta (o se define con la expresión) miembro de valores en alguna colección en su entidad.

Lets de Uso ejemplo siguiente entidad:

@Entity 
public class EntityA { 
    private @Id Integer id; 
    private Integer someValue; 
    @ElementCollection 
    List<Integer> listOfValues; 

    public EntityA() { } 

    public EntityA(Integer id, Integer someValue, List<Integer> listOfValues) { 
     this.id = id; 
     this.someValue = someValue; 
     this.listOfValues = listOfValues; 
    } 
} 

Y siguientes datos de prueba:

EntityA a1 = new EntityA(1, 1, Arrays.asList(4, 5, 6)); 
EntityA a2 = new EntityA(2, 2, Arrays.asList(7, 8, 9)); 

Con siguiente consulta obtenemos A1 como resultado de ello, porque es someValue es uno de los (0,1, 3). Uso de literales en la consulta (SELECCIONE FROM FROM una entidad A WHERE a.someValue IN (0, 1, 3)) produce el mismo resultado.

TypedQuery<EntityA> queryIn = em.createQuery(
    "SELECT a FROM EntityA a WHERE a.someValue IN :values", EntityA.class); 
queryIn.setParameter("values", Arrays.asList(0, 1, 3)); 
List<EntityA> resultIn = queryIn.getResultList(); 

Con siguiente consulta obtenemos a2 como resultado, porque 7 es uno de los valores en listOfValues:

TypedQuery<EntityA> queryMemberOf = em.createQuery(
    "SELECT a FROM EntityA a WHERE :value MEMBER OF a.listOfValues", EntityA.class); 
queryMemberOf.setParameter("value", 7); 
List<EntityA> resultMemberOf = queryMemberOf.getResultList(); 

Esta funcionalidad (incluyendo la recolección como parámetro) se define en JPA especificación 2.0 y no es específico para Hibernate (el código anterior funciona, por ejemplo, con EclipseLink).

7

IN prueba si un valor es uno de una lista fija explícita de literales o parámetros de consulta.

MEMBER OF prueba si un valor está presente en una colección JPA, es decir, una colección que en realidad es parte del modelo de objetos.

+0

No sé si es algo específico de hibernación, pero IN funciona con colecciones aquí ... pero el miembro de parece más apropiado de todos modos. –

+0

usando JPA con Hibernate como proveedor, el uso de IN no funcionó. Tuve que usar MIEMBRO DE. – Amalgovinus

Cuestiones relacionadas