Java tutorial
/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.test.event.autoindexembeddable; import java.util.List; import javax.persistence.EntityManager; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.hibernate.search.jpa.FullTextEntityManager; import org.hibernate.search.jpa.FullTextQuery; import org.hibernate.search.jpa.Search; import org.hibernate.search.test.jpa.JPATestCase; import org.hibernate.search.testsupport.TestForIssue; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * @author Hardy Ferentschik */ @TestForIssue(jiraKey = "HSEARCH-1358") public class EventBasedEmbeddableCollectionUpdateTest extends JPATestCase { private EntityManager entityManager; @Before @Override public void setUp() { super.setUp(); entityManager = factory.createEntityManager(); } @After @Override public void tearDown() { FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager); fullTextEntityManager.purgeAll(Book.class); fullTextEntityManager.flushToIndexes(); fullTextEntityManager.close(); super.tearDown(); } @Test public void testUpdateOfEmbeddedElementCollectionTriggersIndexUpdate() throws Exception { indexBookAndEnsureItIsIndexed(); // find and update book by adding "Bar" into Embedded ElementCollection entityManager.getTransaction().begin(); Book book = entityManager.find(Book.class, 1234L); book.getEmbeddableCategories().getCategories().remove(12L); book.getEmbeddableCategories().getCategories().put(13L, "Bar"); entityManager.persist(book); entityManager.getTransaction().commit(); assertEquals("Foo should have been removed by indexed update", 0, search("embeddableCategories.categories:Foo").size()); assertEquals("Bar should have been added by indexed update", 1, search("embeddableCategories.categories:Bar").size()); } @Override public Class[] getAnnotatedClasses() { return new Class[] {}; // configured in persistence.xml } private void indexBookAndEnsureItIsIndexed() throws ParseException { entityManager.getTransaction().begin(); Book book = new Book(); book.setId(1234L); book.getEmbeddableCategories().getCategories().put(12L, "Foo"); entityManager.persist(book); entityManager.getTransaction().commit(); assertEquals("Foo should have been added during indexing", 1, search("embeddableCategories.categories:Foo").size()); assertEquals("Bar was not yet added", 0, search("embeddableCategories.categories:Bar").size()); } @SuppressWarnings("unchecked") private List<Book> search(String searchQuery) throws ParseException { QueryParser parser = new MultiFieldQueryParser(new String[] {}, new StandardAnalyzer()); FullTextQuery query = Search.getFullTextEntityManager(entityManager) .createFullTextQuery(parser.parse(searchQuery), Book.class); return (List<Book>) query.getResultList(); } }