1

2 つのクラス (One と Two) と 2 つの対応するテーブル ("one" と "two") があります。各テーブルには時間列 ("timeOne" と "timeTwo") があります。

1 つのクエリで、これらの両方のテーブルから最新の 10 件の結果を取得したいと考えています。基本的に、テーブル「1」に 30 行があり、そのうち 3 行が今日追加され、テーブル 2 に 30 行があり、そのうちの 7 行が今日追加された場合、クエリは 10 行 (1 から 3 行、2 から 7 行) を返す必要があります。 )。

可能であれば、これを単一の Hibernate クエリで実行したいと考えています。

4

1 に答える 1

0

ネイティブクエリを使用するのが最も簡単だと思います。

別の方法として、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 を介してやりたいことを行うことはできません。

于 2013-01-23T23:29:56.017 に答える