Package org.hibernate.search.test.embedded.update

Source Code of org.hibernate.search.test.embedded.update.ContainedInWithoutIndexedEmbeddedReindexPropagationTest

/*
* 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.embedded.update;

import static org.junit.Assert.assertEquals;

import java.util.List;

import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.WildcardQuery;
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.Test;

/**
* @author Guillaume Smet
*/
@TestForIssue(jiraKey = "HSEARCH-1573")
public class ContainedInWithoutIndexedEmbeddedReindexPropagationTest extends SearchTestBase {

  @Test
  public void testUpdatingContainedInEntityPropagatesToAllEntitiesSimpleCase() throws Exception {
    // first operation -> save
    FullTextSession session = Search.getFullTextSession( openSession() );
    Transaction tx = session.beginTransaction();

    SimpleParentEntity parent = new SimpleParentEntity( "name1" );
    session.save( parent );

    SimpleChildEntity child = new SimpleChildEntity( parent );
    session.save( child );

    parent.setChild( child );
    session.update( parent );

    tx.commit();
    session.close();

    // assert that everything got saved correctly
    session = Search.getFullTextSession( openSession() );
    tx = session.beginTransaction();
    assertEquals( 1, getSimpleChildEntitiesFromIndex( session, parent.getName() ).size() );
    tx.commit();
    session.close();

    // update the parent name
    session = Search.getFullTextSession( openSession() );
    tx = session.beginTransaction();
    parent.setName( "newname2" );
    session.update( parent );
    tx.commit();
    session.close();

    // check that the SimpleChildEntity has been reindexed correctly
    session = Search.getFullTextSession( openSession() );
    tx = session.beginTransaction();
    assertEquals( 1, getSimpleChildEntitiesFromIndex( session, parent.getName() ).size() );
    tx.commit();
    session.close();
  }

  @Test
  public void testUpdatingContainedInEntityPropagatesToAllEntitiesBusinessCase() throws Exception {
    ProductModel model = new ProductModel( "042024N" );

    ProductArticle article1 = new ProductArticle( model, "02" );
    ProductArticle article2 = new ProductArticle( model, "E3" );

    ProductShootingBrief shootingBrief1 = new ProductShootingBrief( "Shooting brief 1" );
    ProductShootingBrief shootingBrief2 = new ProductShootingBrief( "Shooting brief 2" );

    // first operation -> save
    FullTextSession session = Search.getFullTextSession( openSession() );
    Transaction tx = session.beginTransaction();

    session.save( shootingBrief1 );
    session.save( shootingBrief2 );

    model.setShootingBrief( shootingBrief1 );
    article2.setShootingBrief( shootingBrief2 );

    session.save( model );
    session.save( article1 );
    session.save( article2 );

    tx.commit();
    session.close();

    // assert that everything got saved correctly
    session = Search.getFullTextSession( openSession() );
    tx = session.beginTransaction();
    assertEquals( 2, getShootingBriefsFromIndex( session, model.getMainReferenceCode().getRawValue() ).size() );
    tx.commit();
    session.close();

    // add a new reference code to the model: this should also trigger a reindex of the ProductShootingBrief
    // due to the @ContainedIn dependency graph
    session = Search.getFullTextSession( openSession() );
    tx = session.beginTransaction();
    model.getAdditionalReferenceCodes().add( new ProductReferenceCode( model, "NEWREF" ) );
    session.update( model );
    tx.commit();
    session.close();

    // check that the ProductShootingBrief has been reindexed correctly.
    session = Search.getFullTextSession( openSession() );
    tx = session.beginTransaction();
    assertEquals( 1, getShootingBriefsFromIndex( session, "NEWREF" ).size() );
    tx.commit();
    session.close();
  }

  private List<SimpleChildEntity> getSimpleChildEntitiesFromIndex(FullTextSession session, String name) {
    FullTextQuery q = session.createFullTextQuery( new TermQuery( new Term( "parentName", name ) ), SimpleChildEntity.class );
    @SuppressWarnings("unchecked")
    List<SimpleChildEntity> results = q.list();
    return results;
  }

  private List<ProductShootingBrief> getShootingBriefsFromIndex(FullTextSession session, String referenceCode) {
    FullTextQuery q = session.createFullTextQuery( new WildcardQuery( new Term( "referenceCodeCollection", referenceCode.toLowerCase() + "*" ) ),
        ProductShootingBrief.class );
    @SuppressWarnings("unchecked")
    List<ProductShootingBrief> results = q.list();
    return results;
  }

  @Override
  protected Class<?>[] getAnnotatedClasses() {
    return new Class[] { SimpleParentEntity.class, SimpleChildEntity.class, ProductArticle.class, ProductModel.class, ProductReferenceCode.class,
        ProductShootingBrief.class };
  }
}
TOP

Related Classes of org.hibernate.search.test.embedded.update.ContainedInWithoutIndexedEmbeddedReindexPropagationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.