2010-02-05 17 views
8

Estoy haciendo una UNIÓN EXTERIOR IZQUIERDA, pero solo puedo aplicar Restricciones en la primera tabla. ¿Hay alguna manera de aplicar en la segunda mesa también?Criterios de Hibernación: Izquierda Exterior Unir con restricciones en ambas tablas

Aquí está mi código:

Criteria criteria = this.crudService 
     .initializeCriteria(Applicant.class).setFetchMode("products", 
       FetchMode.JOIN);. 

esto funciona (solicitante tiene una propiedad applicantName):

criteria.add(Restrictions.eq("applicantName", "Markos") 

Ninguna de estas obras (producto tiene una propiedad productName)

criteria.add(Restrictions.eq("productName", "product1") 

criteria.add (Restrictions.eq ("products.productName", "product1") // productos: el nombre de la propiedad criteria.add (Restrictions.eq ("Product.productName", "product1") // Producto: el nombre de la tabla DB

Y esta es la excepción que recibo diciendo (si entiendo correctamente) que la productName propiedad no existe en solicitante:

EJB Exception: ; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant 

he intentado utilizar un alias, pero esto genera un INNER JOIN, en lugar de la combinación externa izquierda que quiero.

¿Cómo puedo aplicar restricciones en ambas tablas?

ACTUALIZACIÓN:

tema es probablemente el mismo que esto: https://forum.hibernate.org/viewtopic.php?p=2393694

Respuesta

12

puede especificar combinación externa izquierda en las createalias ...

.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
.Add(Restrictions.Eq("p.inventedName", inventedName)); 

Sé consciente de que estás haciendo una combinación externa izquierda con una restricción en esa columna ... esencialmente convirtiéndolo en una unión interna. Si también desea solicitantes sin productos, entonces también deberá verificar si el producto es nulo.

0

Actualización:

.CreateAlias("products", "p", JoinType.LEFT_OUTER_JOIN) 
.Add(Restrictions.Eq("p.inventedName", inventedName)); 
0

que resolvieron este problema al crear mi un nuevo criterio y pude utilizar LEFT_OUTER_JOIN en ambos casos.

Cuestiones relacionadas