En un sistema de EAV, tengo una asignación que se parece a esto:NHibernate HQL: combinación externa izquierda con "con" cláusula no funciona
<class name="Record">
<map name="Values" table="RecordFieldValue">
<key column="RecordFK">
<index column="FieldFK">
<element column="Value">
</map>
</class>
me gustaría seleccionar algunos registros, ordenados por el valor de cada registro para un campo específico. Sin embargo, tenga en cuenta que no todos los registros en realidad tendrán un valor para ese campo. En este caso, el registro aún debe buscarse y clasificarse con un valor nulo.
El SQL deseada se vería así:
select rec.*, val.Value
from Record rec
left outer join RecordFieldValue val
on val.RecordFK = rec.PK and val.FieldFK = :field
order by val.Value
Después de un montón de excavación, he encontrado que la forma correcta de modificar el estado "encendido" cláusula de la izquierda se unen en HQL es con el "con" palabra clave (ver https://nhibernate.jira.com/browse/NH-514). Así que probé este HQL:
from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
Desafortunadamente, esto produce el siguiente error: con cláusula de expresiones no hacen referencia a elementos de la cláusula a la que el con-cláusula se asoció. Así que he intentado esto en su lugar:
from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
Pero que produjo un nuevo error: con la cláusula sólo puede hacer referencia a columnas en la tabla de conducción.
¿Alguna idea sobre cómo hacer este trabajo? Gracias.
- Brian
¿Se puede hacer lo mismo con Criterias? –
Hermoso. Deseo que esta JPA left join query sea mejor conocida. Perdí un montón de tiempo. –