2

我正在尝试将 JPA 与 HibernateSearch 一起使用。我在http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html中使用了示例 5.3 。结果如预期的那样出来。

然而,返回的数据是一个巨大的图表。我只需要数据的主键。所以,我尝试了示例 5.9,但它只显示了 Hibernate API。没有javax.persistence.Query.setProjection()方法。

我可以使用什么来获取搜索结果的主键?我应该尝试sessionEntityManagerJPA 中获取休眠状态吗?

谢谢你的帮助。

4

1 回答 1

2

示例 5.3 有点误导。 javax.persistence.Query不必使用。相反,org.hibernate.search.jpa.FullTextQuerysetProjection()我需要的方法。这是生成的代码(具有完全限定的类名):


        //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 回答