Estoy migrando algún proyecto en Hibernate (no estoy seguro acerca de la versión que está incrustada en JBoss5.1.0GA parece 3.x) de Oracle a SQL Server.
Una de las consultas en HQL se parece a:
...
FROM k join k.defs kd
...
WHERE ...
kd not in ( SELECT d.defs FROM d ...)
En MSSQL esta consulta se ejecutó (y falló) como:
....
WHERE
(
(kd.ITEM_ID, kd.DEF_ID) not in (
SELECT
defs.ITEM_ID, defs.DEF_ID
Mi kd
la entidad tiene una clave compuesta de 2 campos ITEM_ID y DEF_ID. SQL Server falla porque en comparación con Oracle no admite t compuesto IN
predicado.
Obviamente ese es un error en el mapeo producido por Hibernate. Mi pregunta es: ¿Cómo configurar / parchear Hibernate para proporcionar una comparación campo por campo de la muestra enlistada?
Respuestas
0 para la respuesta № 1Esto debería lograr lo mismo. La combinación externa izquierda incluye todas las filas en k y las filas de d donde coincide en. d es nulo donde no coincide. Mi sintaxis puede estar un poco apagada. No puedo probarla, pero espero que esto te ayude a comenzar.
FROM k join k.defs kd
left outer join d.defs kd
...
WHERE ...
d is null