ネイティブクエリを使用するのが最も簡単だと思います。
別の方法として、JPQLで次のようなものを使用するため、これを言います。
Query q = entityManager
.createQuery("select f, b from Foo f, Bar b");
q.setMaxResults(2);
これにより、次の SQL が生成されます。
select foo0_.id as id0_0_, bar1_.id as id1_1_, foo0_.val as val0_0_, bar1_.val as val1_1_ from dbo.Foo foo0_ cross join dbo.Bar bar1_ limit ?
(簡潔にするために順序付けを省略しましたが、可能ですorder by
)
クロス結合から (maxResults * maxResults) 行が返されると思いますが、その結果セットを個別のエンティティに折りたたむことはできますが、それがあなたが望むものになる可能性は低いです (また、それほど効率的ではありません)可能)。
したがって、上記の混乱に対処しようとするよりも、ネイティブ クエリを使用する方が (プログラム的に) 最も簡単で効率的です。
要するに、いいえ、私が理解している限り、永続化ユニットにアタッチされたタイプセーフな結果を生成する方法で JPA または Hibernate を介してやりたいことを行うことはできません。