2009-07-15 43 views
2

我想用HibernateSearch使用JPA。我在http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html中使用了示例5.3。結果如預期般出來。JPA HibernateSearch預測

但是,返回的數據是一個巨大的圖。我只需要數據的主鍵。所以,我嘗試了示例5.9,但它只顯示了Hibernate API。沒有javax.persistence.Query.setProjection()方法。

我能用什麼來獲得搜索結果的主鍵?我應該嘗試從JPA的EntityManager中獲得休眠session嗎?

感謝您的任何幫助。

回答

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做投影,一切都很好!