7

私のアプリケーションの1つで、複数のフィールド/列で検索を実行します。その高度な検索とユーザーが結果を検索できる20以上のフィールドがあります。たとえば、ユーザーはに基づいて予約を検索できます

  1. 予約ID
  2. 乗客名
  3. 乗客の年齢
  4. 場所から
  5. 場所へ
  6. 予約状況
  7. 航空会社の名前

そして13のそのような分野。

私は

  1. Hibernate Searchはここで使用でき、使用する必要がありますか?もしそうなら、どのように?HibernateSearchを使用したこのような複雑な検索の例を見つけることができませんでした。

  2. Hibernate検索の代わりに、Hibernateを使用するだけで、パラメーターの数に応じてマルチスレッド検索を設計できます。それは良い考えでしょうか?

  3. ここでHibernateフィルターを使用することは可能ですか?

誰かが入力または参照リンクを提供できますか?

4

3 に答える 3

2

これらの種類のクエリでは、通常Criteria、フォームオブジェクトを使用したクエリを使用します。null次に、渡された各フォームフィールドをチェックし、そうでない場合は、そのフィールドを使用してクエリにnull別のフィールドを追加します。クエリをRestriction使用すると、Javaコードが非常にクリーンに保たれ、厄介な文字列の連結が排除されます。Criteriaあなたのケースの例:

// Form object
public class bookingSearchForm {
    private String bookingId;
    public getBookingId()...
    public setBookingId()...
}

// Hibernate
Criteria criteria = getSession().createCriteria(Booking.class);
if(form.getBookingId() != null) {
    criteria.add(Restrictions.eq("bookingId", form.getBookingId()));
}
criteria.list();
于 2012-04-26T18:37:30.617 に答える
2

私はあなたの決定は容量の要件に基づいているべきだと思います。これらの多くのフィールドを検索するには、通常のHibernateクエリで十分な場合があります。

Hibernate Searchは、リバースインデックスを使用して、大量のデータの検索クエリを高速に取得する場合に役立ちます。たとえば、今後5年間に期待する容量でデータベースをロードする必要があります。通常のHibernateクエリが受け入れ可能であると見なされる場合は、通常のHibernateクエリを使用する必要があると思います。

後の段階でHibernateSearchを導入することもできます。

編集:Hibernte Searchを使用せず、下位レベルに移動して、代わりにApacheLuceneを使用することを選択できます。独自のApacheLuceneインデックスを生成できます。このように、トークン化とインデックス作成のプロセスを完全に制御できるため、レコードを見つけるためにどのフィールドを気にする必要がありません。この方法を選択すると、行名と列名を検索結果の一部として保存できます。

于 2012-05-24T08:21:56.740 に答える
0

はい、HibernateSearchはそのような場合に非常に役立ちます。フィルタを使用できますが、HibernateSearchにもフィルタがあります。

于 2012-05-02T17:24:05.953 に答える