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.

War es hilfreich?

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top