Pregunta

Estoy tratando de utilizar JPA con HibernateSearch.He utilizado el Ejemplo 5.3 en http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html.Los resultados salen como se esperaba.

Sin embargo, los datos que vienen de vuelta es una gran gráfica.Sólo necesito la clave primaria de los datos.Así, traté de Ejemplo 5.9, pero sólo muestra el API de Hibernate.No se trataba de un javax.persistence.Query.setProjection() método.

¿Qué puedo usar para obtener la clave principal de un resultado de búsqueda?Debo intentar obtener la hibernación session a partir de la EntityManager en JPA?

Gracias por la ayuda.

¿Fue útil?

Solución

Ejemplo 5.3 fue un poco engañoso. javax.persistence.Query no tiene que ser utilizado. En cambio, el método tiene org.hibernate.search.jpa.FullTextQuery setProjection() que necesitaba. Aquí está el código resultante (con nombres de clase completos):


        //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 hace la proyección y todo está bien!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top