登録ユーザーを見つけるために、休止状態の基準を使用して検索ルーチンを実装しています。各ユーザーは、1 つ以上のアドレスを持つことができます。次の構造を構築し、データベースにクエリを実行するために必要な制限を追加します。
ricerca = s.createCriteria(User.class).createAlias("addresses","a",Criteria.LEFT_JOIN);
ユーザーデータ(名前、姓、ssnなど)で検索すると、ユーザーが提供した既知のアドレスごとにレコードが取得されました(dbクライアントでテストした休止状態クエリの簡略化されたバージョンを以下に示します)
select *
from User this_ left outer join Address i1_
on this_.ID=i1_.User where lower(this_.Name) like '%mario%' order by i1_.ID desc
Mario には 3 つのアドレスがあり、db クライアントは 3 つのレコードを返します。これは私にとっては問題ありませんが、hibernate はタイプ User の 3 つのオブジェクトを返します。クエリに個別を入れ忘れたときのようなものです。行ごとに1つのアドレスを取得するようにクエリを再設計できますか(同じユーザーに対して3つの結果が得られますが、1つの異なるアドレスがあります)? 注 : ユーザーが住所を提供していない可能性があります。