Je souhaite utiliser les fonctions de recherche en texte intégral d'Hibernate Search. J'ai une application Java EE simple. Je les classes annotés entité et voici mon persistence.xml:Recherche Hibernate et JPA avec transaction JTA
<persistence-unit name="library">
<jta-data-source>jdbc/webrarydb</jta-data-source>
<class>net.hcpeter.webrary.entities.Author</class>
<class>net.hcpeter.webrary.entities.Book</class>
<class>net.hcpeter.webrary.entities.Request</class>
<class>net.hcpeter.webrary.entities.User</class>
<properties>
<property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider"/>
<property name="hibernate.search.indexing_strategy" value="manual"/>
<property name="hibernate.search.default.indexBase" value="/Users/hcpeter/Documents/workspace/indexes"/>
<property name="hibernate.current_session_context_class" value="org.hibernate.context.JTASessionContext"/>
</properties>
</persistence-unit>
Et j'essaie de rechercher cette façon:
EntityManager em = authorFacade.getEntityManager();
FullTextEntityManager ftem = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
ftem.getTransaction().begin();
QueryBuilder qb = ftem.getSearchFactory().buildQueryBuilder().forEntity(Author.class).get();
org.apache.lucene.search.Query query = qb.keyword().onFields("firsName", "lastName").matching("Author#1").createQuery();
javax.persistence.Query persistenceQuery = ftem.createFullTextQuery(query, Author.class);
List<Author> result = persistenceQuery.getResultList();
em.getTransaction().commit();
em.close();
for (Author author : result) {
System.out.println(author.getLastName() + " " + author.getFirstName());
}
return result;
Alors je lui ai donné peut ne pas utiliser un EntityTransaction tout en utilisant JTA. Donc, ma question est comment puis-je utiliser Hibernate Search avec JTA?
Je souhaite utiliser les transactions JTA. Mais comment puis-je utiliser avec Lucene Queries? J'ai besoin de QueryBuilder quand il vient d'EntityManager qui n'est pas FullTextEntityManager. Lorsque j'essaie d'obtenir le fullTextEntityManager, j'obtiens 'Essayer d'utiliser Hibernate Search sans Hibernate EntityManager' . Et je n'ai pas trouvé d'exemple jusqu'ici ... – hcpeter
Alors utilisez-vous une autre implémentation de JPA que Hibernate? Quel serveur d'application? Je peux voir que vous n'avez pas de fournisseur défini dans le fichier persistence.xml, ce sera donc ce qui est par défaut dans votre serveur d'applications. Si vous voulez être sûr que c'est Hibernate, alors vous devez ajouter org.hibernate.ejb.HibernatePersistence comme décrit par exemple ici: http://banana-blog.net/tag/jpa/ –
Non J'utilise hibernate avec glassfish 3.1. Je construis mes requêtes avec javax.persistence.criteria.CriteriaQuery et CriteriaBuilder. – hcpeter