0

登録ユーザーを見つけるために、休止状態の基準を使用して検索ルーチンを実装しています。各ユーザーは、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つの異なるアドレスがあります)? 注 : ユーザーが住所を提供していない可能性があります。

4

1 に答える 1

1

ここで説明されている解決策はあなたにとって役に立ちますか?

ユーザー ID にプロジェクションを使用distinctしてユーザー ID を取得し、必要に応じてハイドレートする必要があります。

ricerca.setProjection(Projections.distinct(Projections.property("id")))
于 2011-10-11T16:50:07.793 に答える