package jpasearch.repository.fulltext; import static org.assertj.core.api.Assertions.assertThat; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.transaction.Transactional; import jpasearch.TestApplication; import jpasearch.domain.fulltext.EntityWithFullText; import jpasearch.domain.fulltext.EntityWithFullText_; import jpasearch.domain.fulltext.EntityWithMultipleFullText; import jpasearch.domain.fulltext.EntityWithMultipleFullText_; import jpasearch.repository.query.SearchParameters; import jpasearch.repository.query.builder.SearchBuilder; import org.hibernate.search.jpa.FullTextEntityManager; import org.hibernate.search.jpa.Search; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; /** * @author speralta */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestApplication.class) @Transactional @TransactionConfiguration(defaultRollback = true) public class EntityWithMultipleFullTextRepositoryIT { @Inject private EntityWithMultipleFullTextRepository entityWithMultipleFullTextRepository; @PersistenceContext private EntityManager entityManager; @Test public void test() { final String testValue = "test"; assertThat(entityWithMultipleFullTextRepository.findCount(findByValue(testValue))).isEqualTo(0); EntityWithMultipleFullText entityWithMultipleFullText = new EntityWithMultipleFullText(); entityWithMultipleFullText.setValue1(testValue); entityWithMultipleFullText.setValue2("abcdef"); entityWithMultipleFullText = entityWithMultipleFullTextRepository.save(entityWithMultipleFullText); FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager); fullTextEntityManager.index(entityWithMultipleFullText); fullTextEntityManager.flushToIndexes(); fullTextEntityManager.flush(); assertThat(entityWithMultipleFullTextRepository.find(findByValue(testValue))).containsExactly(entityWithMultipleFullText); } @Test public void testAnd() { final String testValue1 = "abc"; final String testValue2 = "def"; assertThat(entityWithMultipleFullTextRepository.findCount(findByValue(testValue1, testValue2))).isEqualTo(0); EntityWithMultipleFullText entityWithMultipleFullText = new EntityWithMultipleFullText(); entityWithMultipleFullText.setValue1(testValue1); entityWithMultipleFullText.setValue2(testValue2); entityWithMultipleFullText = entityWithMultipleFullTextRepository.save(entityWithMultipleFullText); EntityWithMultipleFullText entityWithMultipleFullText2 = new EntityWithMultipleFullText(); entityWithMultipleFullText2.setValue1(testValue1); entityWithMultipleFullText2.setValue2("toto"); entityWithMultipleFullText2 = entityWithMultipleFullTextRepository.save(entityWithMultipleFullText2); EntityWithMultipleFullText entityWithMultipleFullText3 = new EntityWithMultipleFullText(); entityWithMultipleFullText3.setValue1("toto"); entityWithMultipleFullText3.setValue2(testValue2); entityWithMultipleFullText3 = entityWithMultipleFullTextRepository.save(entityWithMultipleFullText3); FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager); fullTextEntityManager.index(entityWithMultipleFullText); fullTextEntityManager.index(entityWithMultipleFullText2); fullTextEntityManager.index(entityWithMultipleFullText3); fullTextEntityManager.flushToIndexes(); fullTextEntityManager.flush(); assertThat(entityWithMultipleFullTextRepository.find(findByValue(testValue1, testValue2))).containsExactly(entityWithMultipleFullText); } private SearchParameters<EntityWithMultipleFullText> findByValue(String... value) { return new SearchBuilder<EntityWithMultipleFullText>() // .fullText(EntityWithMultipleFullText_.value1) // .andOn(EntityWithMultipleFullText_.value2) // .andMode() // .search(value) // .build(); } @Test public void deep_test() { final String testValue = "test"; assertThat(entityWithMultipleFullTextRepository.findCount(findByDeepValue(testValue))).isEqualTo(0); EntityWithMultipleFullText entityWithMultipleFullText = new EntityWithMultipleFullText(); entityWithMultipleFullText.setValue1("abcdef"); EntityWithFullText entityWithFullText = new EntityWithFullText(); entityWithFullText.setValue(testValue); entityWithMultipleFullText.setEntityWithFullText(entityWithFullText); entityWithMultipleFullText = entityWithMultipleFullTextRepository.save(entityWithMultipleFullText); FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager); fullTextEntityManager.index(entityWithMultipleFullText); fullTextEntityManager.flushToIndexes(); fullTextEntityManager.flush(); assertThat(entityWithMultipleFullTextRepository.find(findByDeepValue(testValue))).containsExactly(entityWithMultipleFullText); } private SearchParameters<EntityWithMultipleFullText> findByDeepValue(String value) { return new SearchBuilder<EntityWithMultipleFullText>() // .fullText(EntityWithMultipleFullText_.value1) // .andOn(EntityWithMultipleFullText_.value2) // .andOn(EntityWithMultipleFullText_.entityWithFullText) // .to(EntityWithFullText_.value) // .search(value).build(); } }