Package org.hibernate.ogm.backendtck.associations.collection.unidirectional

Source Code of org.hibernate.ogm.backendtck.associations.collection.unidirectional.CollectionUnidirectionalTest

/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* 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.ogm.backendtck.associations.collection.unidirectional;
import static org.fest.assertions.Assertions.assertThat;
import static org.hibernate.ogm.utils.TestHelper.getNumberOfAssociations;
import static org.hibernate.ogm.utils.TestHelper.getNumberOfEntities;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.ogm.utils.OgmTestCase;
import org.junit.Test;

/**
* @author Emmanuel Bernard
*/
public class CollectionUnidirectionalTest extends OgmTestCase {

  @Test
  public void testUnidirectionalCollection() throws Exception {
    final Session session = openSession();
    Transaction transaction = session.beginTransaction();
    SnowFlake sf = new SnowFlake();
    sf.setDescription( "Snowflake 1" );
    session.save( sf );
    SnowFlake sf2 = new SnowFlake();
    sf2.setDescription( "Snowflake 2" );
    session.save( sf2 );
    Cloud cloud = new Cloud();
    cloud.setLength( 23 );
    cloud.getProducedSnowFlakes().add( sf );
    cloud.getProducedSnowFlakes().add( sf2 );
    session.persist( cloud );
    session.flush();
    assertThat( getNumberOfEntities( sessions ) ).isEqualTo( 3 );
    assertThat( getNumberOfAssociations( sessions ) ).isEqualTo( 1 );
    transaction.commit();

    assertThat( getNumberOfEntities( sessions ) ).isEqualTo( 3 );
    assertThat( getNumberOfAssociations( sessions ) ).isEqualTo( 1 );

    session.clear();

    transaction = session.beginTransaction();
    cloud = (Cloud) session.get( Cloud.class, cloud.getId() );
    assertNotNull( cloud.getProducedSnowFlakes() );
    assertEquals( 2, cloud.getProducedSnowFlakes().size() );
    final SnowFlake removedSf = cloud.getProducedSnowFlakes().iterator().next();
    SnowFlake sf3 = new SnowFlake();
    sf3.setDescription( "Snowflake 3" );
    session.persist( sf3 );
    cloud.getProducedSnowFlakes().remove( removedSf );
    cloud.getProducedSnowFlakes().add( sf3 );
    transaction.commit();

    assertThat( getNumberOfEntities( sessions ) ).isEqualTo( 4 );
    assertThat( getNumberOfAssociations( sessions ) ).isEqualTo( 1 );

    session.clear();

    transaction = session.beginTransaction();
    cloud = (Cloud) session.get( Cloud.class, cloud.getId() );
    assertNotNull( cloud.getProducedSnowFlakes() );
    assertEquals( 2, cloud.getProducedSnowFlakes().size() );
    boolean present = false;
    for ( SnowFlake current : cloud.getProducedSnowFlakes() ) {
      if ( current.getDescription().equals( removedSf.getDescription() ) ) {
        present = true;
      }
    }
    assertFalse( "flake not removed", present );
    for ( SnowFlake current : cloud.getProducedSnowFlakes() ) {
      session.delete( current );
    }
    session.delete( session.load( SnowFlake.class, removedSf.getId() ) );
    cloud.getProducedSnowFlakes().clear();
    transaction.commit();

    assertThat( getNumberOfEntities( sessions ) ).isEqualTo( 1 );
    assertThat( getNumberOfAssociations( sessions ) ).isEqualTo( 0 );

    session.clear();

    transaction = session.beginTransaction();
    cloud = (Cloud) session.get( Cloud.class, cloud.getId() );
    assertNotNull( cloud.getProducedSnowFlakes() );
    assertEquals( 0, cloud.getProducedSnowFlakes().size() );
    session.delete( cloud );
    session.flush();
    transaction.commit();

    assertThat( getNumberOfEntities( sessions ) ).isEqualTo( 0 );
    assertThat( getNumberOfAssociations( sessions ) ).isEqualTo( 0 );
    session.close();

    checkCleanCache();
  }

  @Override
  protected Class<?>[] getAnnotatedClasses() {
    return new Class<?>[] {
        Cloud.class,
        SnowFlake.class
    };
  }
}
TOP

Related Classes of org.hibernate.ogm.backendtck.associations.collection.unidirectional.CollectionUnidirectionalTest

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.