left hibernate nhibernate subquery criteria

left - nhibernate session createquery



Criterios de Hibernate para "en subselección" (3)

Intento hacer algo como esto, pero usando Criteria lugar de HQL :

select user from User where user in ( select user from UserDomain where domain.id = "XXX" )

El usuario es una entidad que tiene una relación de one-to-many con la tabla de unión UserDomain. El punto aquí es simplemente encontrar Usuarios que están vinculados a un Domain tenga id = "XXX".

Parece que debería ser muy simple ... pero hasta el momento no tengo suerte para encontrar ningún documento útil.


En las cláusulas usualmente se puede transformar en join. Tyr esto:

Criteria c = session.createCriteria(User.class, "u"); c.createAlias("u.userDomain", "ud"); // inner join by default c.add(Restrictions.le("ud.id", 1));



La subconsulta es muy útil en casos, que necesita buscar en el Usuario, teniendo User - Dominios uno-a-muchos . En ese caso, WHERE UserId IN (subquery) aporta grandes ventajas: todavía estamos trabajando con una tabla / entidad de User plana ... para que podamos hacer la paginación adecuada.

Aquí está la documentación 15.8. Consultas separadas y subconsultas

El borrador podría ser: subconsulta:

DetachedCriteria userSubquery = DetachedCriteria.forClass(UserDomain.class, "ud") // Filter the Subquery .add(Restrictions.eq(UserDomain.DOMAIN, domain)) // SELECT The User Id .setProjection( Projections.property("ud.userId") );

Y la consulta principal:

Criteria query = session.createCriteria(User.class, "u") .add( Subqueries.propertyIn("u.id", userSubquery) );

Ahora tenemos una consulta, que podría usarse para paginación