27.3. 使い方


Hibernate Search はアノテーションを使ってエンティティを Lucene のインデックスにマップします。 詳細については リファレンスマニュアル を参照してください。
Hibernate Search は API および JPA や Hibernate のセマンティックと完全に統合されています。 HQL ベースまたは検索条件ベースの問い合わせからの切り替えにはほとんどコードを必要としません。 アプリケーションは主に Hibernate の Session のサブクラスとなる FullTextSession API と連携します。
Hibernate Search が存在する場合は、JBoss Seam は FullTextSession をインジェクトします。
@Stateful
@Name("search")
public class FullTextSearchAction implements FullTextSearch, Serializable {

  @In FullTextSession session;

  public void search(String searchString) {
    org.apache.lucene.search.Query luceneQuery = getLuceneQuery();
    org.hibernate.Query query session.createFullTextQuery(luceneQuery, 
                                                          Product.class);
    searchResults = query
                    .setMaxResults(pageSize + 1)
                    .setFirstResult(pageSize * currentPage)
                    .list();
  }
  [...]
}
Copy to Clipboard Toggle word wrap

注記

ここでは、 FullTextSessionorg.hibernate.Session を拡張しているため通常の Hibernate Session として使用することができます。
JPA を使用した場合、より円滑な統合が提案されます。
@Stateful 
@Name("search") 
public class FullTextSearchAction implements FullTextSearch, Serializable { 
  @In FullTextEntityManager em; 
  public void search(String searchString) { 
    org.apache.lucene.search.Query luceneQuery = getLuceneQuery(); 
    javax.persistence.Query query = em.createFullTextQuery(luceneQuery, 
                                                           Product.class); 
    searchResults = query 
                    .setMaxResults(pageSize + 1) 
                    .setFirstResult(pageSize * currentPage) 
                    .getResultList(); 
  } 
  [...]
}
Copy to Clipboard Toggle word wrap
FullTextEntityManager は Hibernate Search が存在するところにインジェクトされます。 FullTextEntityManager は検索固有のメソッドで EntityManager を拡張します。 同様にして FullTextSessionSession を拡張します。
EJB 3.0 Session またはメッセージ駆動型 Beanのインジェクションが使用される場合 (つまりインジェクションが @PersistenceContext アノテーションを使用) は、宣言ステートメント内で FullTextEntityManager インターフェースを使うことで EntityManager インタフェースの置換はできません。 ただし、 インジェクトされる実装は FullTextEntityManager 実装になり、 ダウンキャストが可能です。
@Stateful
@Name("search")
public class FullTextSearchAction implements FullTextSearch, Serializable {
  
  @PersistenceContext EntityManager em;

  public void search(String searchString) {
    org.apache.lucene.search.Query luceneQuery = getLuceneQuery();
    FullTextEntityManager ftEm = (FullTextEntityManager) em;
    javax.persistence.Query query = 
      ftEm.createFullTextQuery(luceneQuery, Product.class);
    searchResults = query
                    .setMaxResults(pageSize + 1)
                    .setFirstResult(pageSize * currentPage)
                    .getResultList();
  }
  [...]
}
Copy to Clipboard Toggle word wrap

注記

Seam の外側で Hibernate Search を使用するのに慣れている方は、 Hibernate Search が Seam と統合されるときは Search.createFullTextSession を使用する必要がないことを覚えておいてください。
Hibernate Search の作業サンプルについては JBoss Seam ディストリビューションの Blog サンプルか DVDStore をご確認ください。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat