やあ、
クエリの種類に少し複雑な問題が発生しました。正確に言うと、これは私が取得したいSQLクエリです。
select * from Parent parent
left join fetch parent.child child
left joint fetch child.grandchild grandchild with age < 18;
フェッチのため、with句は禁止されています。
だから私はフィルターを使わなければなりませんでした。しかし、孫にフィルターを適用する方法が見つかりませんでした。これは、@Filterまたは@FilterDefが適切なクラスにないためだと思います。
すぐに、GrandchildクラスでFilter(@FilterDef)を宣言し、ChildクラスのCollection属性の宣言の直前に@Filter(name = "age"、condition = "age <:age_param)を配置します。クラスは次のようなものです:
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();
しかし、孫との合流には条件はありません。
このクエリを取得する方法はありますか?私は何か間違ったことをしていますか?
手伝ってくれてありがとう