Hello, I have a HQL query like this:.
Code:
SELECT destino
FROM UnidadAlmacenamiento u
JOIN u.tipoUnidad.tiposSalida tipo
JOIN tipo.unidades destino
WHERE u = :origen
AND (destino.loteActual is null OR destino.loteActual.peso < destino.capacidad))
In UnidadAlmacenamiento Entity I have this @OneToOne:
Code:
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
public Lote getLoteActual() {
return loteActual;
}
The problem is that Hibernate is not generating the sql query that I spect, using OUTER JOIN to get the loteActual property.
Hibernate generates this sql:
Code:
select
unidades4_.id as id20_,
unidades4_.capacidad as capacidad20_,
unidades4_.concurrentLock as concurre3_20_,
unidades4_.loteActual_id as loteActual6_20_,
unidades4_.nombre as nombre20_,
unidades4_.tipoUnidad_id as tipoUnidad5_20_
from
UnidadAlmacenamiento unidadalma0_
inner join
TipoUnidad tipounidad1_ on unidadalma0_.tipoUnidad_id=tipounidad1_.id
inner join
TipoUnidad_TipoUnidad tipossalid2_ on tipounidad1_.id=tipossalid2_.tiposEntrada_id
inner join
TipoUnidad tipounidad3_ on tipossalid2_.tiposSalida_id=tipounidad3_.id
inner join
UnidadAlmacenamiento unidades4_ on tipounidad3_.id=unidades4_.tipoUnidad_id,
Lote lote5_
where
unidades4_.loteActual_id=lote5_.id
and unidadalma0_.id=?
and (
unidades4_.loteActual_id is null
or lote5_.peso<unidades4_.capacidad
)
The sql that I spect would be something like this:
Code:
select
unidades4_.id as id20_,
unidades4_.capacidad as capacidad20_,
unidades4_.concurrentLock as concurre3_20_,
unidades4_.loteActual_id as loteActual6_20_,
unidades4_.nombre as nombre20_,
unidades4_.tipoUnidad_id as tipoUnidad5_20_
from
UnidadAlmacenamiento unidadalma0_
inner join
TipoUnidad tipounidad1_ on unidadalma0_.tipoUnidad_id=tipounidad1_.id
inner join
TipoUnidad_TipoUnidad tipossalid2_ on tipounidad1_.id=tipossalid2_.tiposEntrada_id
inner join
TipoUnidad tipounidad3_ on tipossalid2_.tiposSalida_id=tipounidad3_.id
inner join
UnidadAlmacenamiento unidades4_ on tipounidad3_.id=unidades4_.tipoUnidad_id
left outer join
Lote lote5_ on unidades4_.loteActual_id=lote5_.id
where
unidadalma0_.id=?
and (
unidades4_.loteActual_id is null
or lote5_.peso<unidades4_.capacidad
)
Could any one help me?
Regards,
Chiara