嘿,
我遇到了一个有点复杂的查询类型的问题。直截了当,这是我想要得到的 SQL 查询:
select * from Parent parent
left join fetch parent.child child
left joint fetch child.grandchild grandchild with age < 18;
由于 fetch,with 子句被禁止。
所以我必须使用过滤器。但是我没有找到在 Grandchild 上应用过滤器的方法,我认为这是因为 @Filter 或 @FilterDef 不在正确的类中。
我立即在 Grandchild 类中声明了 Filter (@FilterDef),并将 @Filter(name="age", condition = "age < :age_param) 放在 Child 类中 Collection 属性的声明之前。类是这样的:
public class Parent {
@OneToOne(fetch = FetchType.LAZY,mappedBy="parent")
private Collection<Child> children;
}
public class Child {
private Parent parent;
@Filter(name="age", condition = "age < :age_param")
@OneToMany(fetch = FetchType.LAZY,mappedBy="child")
private Collection<GrandChild> grandchildren;
}
@FilterDef(name="majority",
parameters={@ParamDef(name="age",type="int")}
)
public class GrandChild {
private Child child;
private int age;
}
然后我做:
filter = session.enableFiler("majority");
filter.setParameter("age_param",18);
session.createQuery("select * from Parent parent
left join fetch parent.child child
left joint fetch child.grandchild")
.list();
但是与孙子的加入没有条件。
有没有办法获得这个查询?难道我做错了什么 ?
感谢帮助