how to filter a left join in jpa query -


i'm having trouble jpa object not being returned. i've got customers , addresses, customer can have 0 or more addresses. soft delete items. query works, except when there's no addresses returned don't customer details (returns null).

so set query this:

select c customer c left join fetch c.createuser  left join fetch c.lastupdateuser  left join fetch c.addressbook  c.id = 1 , c.markfordelete = false  , (a.id null or a.markfordelete = false) 

it works fine if there's row in addressbook. if delete addresses i'm getting no result back.

the equivalent of i'm trying accomplish in sql is:

select * customers c left join customer_addresses ca on c.id = ca.customer_id , c.markfordelete = 0 , ca.markfordelete = 0; 

which works , gives me single result.

ok, using similar data here, found following query should want:

select distinct c customer c left join fetch c.createuser left join fetch c.lastupdateuser left join fetch c.addressbook c.id = 1 , c.markfordelete = false , (size(c.addressbook) = 0 or a.markfordelete = false) 

note, found distinct important, otherwise got repeated data (customers in case).

also, customers returned have addresses not return addresses customer. attached list have addresses have markfordelete false.


Comments