これが私のショーケースコードです:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root<AA> aa = q.from(AA.class);
q.multiselect(aa.get("id").alias("id"),
articolo.get("a").alias("a"),
articolo.get("b").alias("b"),
articolo.get("c").get("t").alias("c"),
articolo.get("d").alias("d"));
System.out.println("RootCount: "+q.getRoots().size());
Query query = em.createQuery(q);
List<Tuple> list = query.getResultList();
ここで、AAはマップされたテーブルであり、cはCCタイプのアイテムです(CCは別のマップされたテーブルです)。
ええと、私は画像を挿入することを許可されていないので、テーブルスキーマ
cは、テーブルCCを参照する外部キーです。
したがって、上記のコードは「RootCount:1」(ルートは1つのみ)を出力しますが、結果のクエリは次のようになります。
select aa.id, aa.a, aa.b, cc.t, aa.d from AA aa, CC cc where aa.c=cc.id
つまり...2つのルートですが、q.getRoots()は、明示的に定義したルートのみを報告します。
どうすれば本当のルーツを手に入れることができますか?