を制限私は、アプリケーションのすべてのデータを返すの基準を持っているが、基本的に、必要です。Hibernateの基準:その後、個別のエンティティと
Criteria criteria = session.createCriteria(Client.class);
criteria.createAlias("address", "address");
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.setFirstResult(init);
criteria.setMaxResults(max);
List<Client> clients = criteria.list();
問題は関係クライアント/アドレスが双方向であるということです:クライアント上の一つのアドレスを持っており、 1つのアドレスが複数のクライアントに属している可能性があります。
「単一の」クライアントオブジェクトは、そのテーブルに表示されているクライアント数に基づいて取得したいと考えています。
最初にsetFirstResult/setMaxResultsが実行されるため、すでに適用されている制限内で重複したクライアントが取得されています。 (グループレベルではないアプリケーションレベルが使用された)後、hibernateは複製されたクライアントのリッジを取得して、setMaxResultsで指定された最大数よりも少ないクライアントで終了します。
(投影グループ)は、クライアント/アドレスで必要なすべての列を返さず、クエリがグループ化しているグループのみをグループ化することはできません。
(要約すると、1ページに100の結果がありますが、重複を破棄した後、100の代わりに98の結果が得られます)。これは、リミット:LIMIT0,100が適用されるためです。 )
FetchMode.SELECTは私のために修正しました - この場合、他のモードは動作しません。 –
FetchMode.SELECTは素晴らしいです...何らかの理由でそれを強制的に取得することを除けば、 フェッチされているエンティティのpkに "distinct"を実行するだけで休止状態を知らせる方法はありませんか? ??これは最も明白な些細なもののように思えますし、いつものように、休止状態は人生を非常に複雑にしてくれます。 – Marc
ところで、HQLでこれを行うのは、それが聞こえるほど些細なことです。あなたはあなたの質問に「distinct」という言葉を追加するだけです。なぜこれがCriteria APIを使用して痛いほど厄介なのかは、私の外にあります。 OOデータベースの使用はまだ開始できますか? – Marc