我试图使用JPA与HibernateSearch。我用实施例5.3中 HTTP://文档.jboss.org /休眠/稳定/搜索/参考/ EN / HTML /搜索query.html 。结果出来按预期方式。

然而,反回的数据是一个巨大的曲线图。我只需要该数据的主键。所以,我试图实例5.9,但它只能说明Hibernate的API。没有一个方法javax.persistence.Query.setProjection()

我可以用得到的只是一个搜索结果的主键?我应该尝试从session休眠EntityManager在JPA?

感谢您的帮助。

有帮助吗?

解决方案

实施例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确实投影一切都很好!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top