/*
* 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.engine.optimizations.mappedsuperclasscollection;
import java.util.List;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.test.SearchTestBase;
import org.hibernate.search.testsupport.TestForIssue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Verify that updates to collections defined in a @MappedSuperclass actually trigger a re-indexing.
*/
@TestForIssue(jiraKey = "HSEARCH-1583")
public class InheritedCollectionFieldCollectionUpdateEventTest extends SearchTestBase {
private static final String FIRST_COLLECTION_VALUE = "1";
private static final String SECOND_COLLECTION_VALUE = "2";
private FullTextSession fullTextSession;
@Before
public void setUp() throws Exception {
super.setUp();
Session session = openSession();
fullTextSession = Search.getFullTextSession( session );
}
@After
public void tearDown() throws Exception {
fullTextSession.close();
super.tearDown();
}
@Test
public void testUpdateOfCollectionInMappedSuperclass() {
EntityExtendingMappedSuperclassWithCollectionField entity = new EntityExtendingMappedSuperclassWithCollectionField();
addToCollectionAndPersist( entity, FIRST_COLLECTION_VALUE );
assertEquals(
"First collection value is persisted and should be indexed",
1,
searchEntityByCollectionValue( FIRST_COLLECTION_VALUE ).size()
);
assertEquals(
"Second collection value is not yet added and should not be indexed",
0,
searchEntityByCollectionValue( SECOND_COLLECTION_VALUE ).size()
);
fullTextSession.clear();
// re-get the entity
entity = (EntityExtendingMappedSuperclassWithCollectionField) fullTextSession.get(
EntityExtendingMappedSuperclassWithCollectionField.class, entity.getId()
);
addToCollectionAndPersist( entity, SECOND_COLLECTION_VALUE );
assertEquals(
"Second collection value is persisted and should be indexed",
1,
searchEntityByCollectionValue( SECOND_COLLECTION_VALUE ).size()
);
}
private void addToCollectionAndPersist(EntityExtendingMappedSuperclassWithCollectionField entity, String value) {
Transaction transaction = fullTextSession.beginTransaction();
entity.getCollection().add( value );
fullTextSession.persist( entity );
transaction.commit();
fullTextSession.clear();
}
@SuppressWarnings("unchecked")
private List<EntityExtendingMappedSuperclassWithCollectionField> searchEntityByCollectionValue(String value) {
FullTextQuery query = fullTextSession.createFullTextQuery(
new TermQuery( new Term( "collection", value ) ),
EntityExtendingMappedSuperclassWithCollectionField.class
);
return query.list();
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] {
MappedSuperclassWithCollectionField.class,
EntityExtendingMappedSuperclassWithCollectionField.class
};
}
}