2

HibernateSearch で JPA を使用しようとしています。http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.htmlの例 5.3 を使用しました。期待通りの結果が得られます。

しかし、戻ってくるデータは巨大なグラフです。データの主キーのみが必要です。そのため、例 5.9 を試してみましたが、Hibernate API しか表示されません。方法はありませんでしたjavax.persistence.Query.setProjection()

検索結果の主キーだけを取得するには、何を使用できますか? JPAで休止状態を取得しようとする必要がありsessionますか?EntityManager

助けてくれてありがとう。

4

1 に答える 1

2

例 5.3 は少し誤解を招くものでした。 javax.persistence.Query使用する必要はありません。代わりに、org.hibernate.search.jpa.FullTextQuery必要setProjection()な方法があります。結果のコードは次のとおりです (完全修飾クラス名を使用)。


        //Open JPA session
        javax.persistence.EntityManagerFactory emf=javax.persistence.Persistence.createEntityManagerFactory("manager1");
        javax.persistence.EntityManager em=emf.createEntityManager();
        em.getTransaction().begin();

        //Make a FullText EM from the JPA session.
        org.hibernate.search.jpa.FullTextEntityManager fullTextSession=org.hibernate.search.jpa.Search.getFullTextEntityManager(em);

        //Build the lucene query.
        org.apache.lucene.queryParser.QueryParser parser=new org.apache.lucene.queryParser.QueryParser("data1",new org.apache.lucene.analysis.standard.StandardAnalyzer());
        org.apache.lucene.search.Query query=parser.parse("FindMe");

        //Convert to a hibernate query.
        org.hibernate.search.jpa.FullTextQuery query2=fullTextSession.createFullTextQuery(query, SampleBean.class);

        //Set the projections
        query2.setProjection("id");

        //Run the query.
        for (Object[] row:(List)query2.getResultList()){
            //Show the list of id's
            System.out.println(row[0]);
        }

        //Close
        em.getTransaction().commit();
        em.close();
        emf.close();

query2投影を行い、すべて順調です!

于 2009-07-15T18:59:39.330 に答える