【发布时间】:2015-12-30 06:02:01
【问题描述】:
[更改标题]
我正在处理父子关系,我们需要过滤子实体的字段。还有一些在 Parent 和 Child 中定义的 Collections 是 EAGER fetch。
当尝试使用 HQL 结果是错误的,构建的子对象比我预期的要多。
我的对象关系:
Cat -> Kitten (One to Many)
Kitten -> Owner (One to One)
Kitten -> Vet_Doctor (One to One)
数据:
Cat1
-> KittenA - Male
-> KittenB - Male
-> KittenC - Female
还有欧文斯、医生等,
HQL:
select distinct cats from Cat as cats
inner join cats.kitten as kittens
left outer join kittens.owner
left outer join kittens.doctor
where kittens.gender = :gender
当我搜索 'male' 时,结果同时包含雄性和雌性小猫,这是错误的。
来自日志的查询(类似这样):
select distinct cats.id, cats.name, cats.age
from Cat as cats
inner join cats.Kitten on Kitten.catid = Cat.id
left outer join Owner on Kitten.ownerid = Owner.id
left outer join Vet_Doctor on Kitten.doctorid = Vet_Doctor.id
where Kitten.gender = 'male';
select Kitten.id, Kitten.name, Owner.name, Vet_Doctor.name
from Cat
inner join Kitten on Kitten.catid = Cat.id
left outer join Owner on Kitten.ownerid = Owner.id
left outer join Vet_Doctor on Kitten.doctorid = Vet_Doctor.id
where Cat.id = 1;
我发现可以使用 Hibernate Filters 来过滤子对象。但是如何使用 HQL 或 Criteria 来做到这一点?
任何人都可以请帮助,在此先感谢。
【问题讨论】:
标签: java hibernate jpa orm hql