JPA Hibernate Search Projections
-
16-09-2019 - |
Frage
Ich versuche, JPA mit HibernateSearch zu verwenden. Ich benutzte Beispiel 5.3 in http: // docs .jboss.org / hibernate / stable / search / Referenz / en / html / search-query.html . Die Ergebnisse stammen aus als erwartet.
Allerdings kommen die Daten zurück ist ein sehr großes Graphen. Ich brauche nur den Primärschlüssel der Daten. Also habe ich versucht, Beispiel 5.9, aber es zeigt nur die Hibernate-API. Es war keine javax.persistence.Query.setProjection()
Methode.
Was kann ich nur den Primärschlüssel eines Suchergebnisses zu bekommen verwenden? Soll ich versuchen, die Hibernate session
vom EntityManager
in JPA zu bekommen?
Vielen Dank für jede Hilfe.
Lösung
Beispiel 5.3 war ein wenig irreführend. javax.persistence.Query
muss nicht verwendet werden. Stattdessen hat org.hibernate.search.jpa.FullTextQuery
die setProjection()
Methode, die ich brauchte. Hier ist der resultierende Code (mit voll qualifizierten Klassennamen):
//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
hat die Projektion und alles ist gut!