JPA HibernateSearch Проекции - PullRequest
       9

JPA HibernateSearch Проекции

2 голосов
/ 15 июля 2009

Я пытаюсь использовать JPA с HibernateSearch. Я использовал Пример 5.3 в http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html. Результаты получаются, как и ожидалось.

Однако возвращающиеся данные - это огромный график. Мне нужен только первичный ключ данных. Итак, я попробовал Пример 5.9, но он показывает только Hibernate API. Не было javax.persistence.Query.setProjection() метода.

Что я могу использовать, чтобы получить только первичный ключ результата поиска? Стоит ли пытаться получить спящий session из EntityManager в JPA?

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 15 июля 2009

Пример 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 делает прогноз и все хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...