/*
* 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.inheritance;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.hibernate.ogm.backendtck.simpleentity.Hero;
import org.hibernate.ogm.backendtck.simpleentity.SuperHero;
import org.hibernate.ogm.utils.PackagingRule;
import org.hibernate.ogm.utils.TestHelper;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import static org.fest.assertions.Assertions.assertThat;
import static org.hibernate.ogm.utils.TestHelper.dropSchemaAndDatabase;
/**
* @author Jonathan Wood <jonathanshawwood@gmail.com>
*/
public class JPAPolymorphicCollectionTest {
@Rule
public PackagingRule packaging = new PackagingRule(
"persistencexml/ogm.xml",
Hero.class,
SuperHero.class, HeroClub.class
);
private EntityManagerFactory emf;
private EntityManager em;
@Before
public void setUp() {
emf = Persistence.createEntityManagerFactory( "ogm",
TestHelper.getDefaultTestSettings() );
em = emf.createEntityManager();
}
@After
public void tearDown() {
dropSchemaAndDatabase( emf );
em.close();
emf.close();
}
@Test
public void testJPAPolymorphicCollection() throws Exception {
em.getTransaction().begin();
Hero h = new Hero();
h.setName( "Spartacus" );
em.persist( h );
SuperHero sh = new SuperHero();
sh.setName( "Batman" );
sh.setSpecialPower( "Technology and samurai techniques" );
em.persist( sh );
HeroClub hc = new HeroClub();
hc.setName( "My hero club" );
hc.getMembers().add( h );
hc.getMembers().add( sh );
em.persist( hc );
em.getTransaction().commit();
em.clear();
em.getTransaction().begin();
HeroClub lhc = em.find( HeroClub.class, hc.getName() );
assertThat( lhc ).isNotNull();
Hero lh = lhc.getMembers().get( 0 );
assertThat( lh ).isNotNull();
assertThat( lh ).isInstanceOf( Hero.class );
Hero lsh = lhc.getMembers().get( 1 );
assertThat( lsh ).isNotNull();
assertThat( lsh ).isInstanceOf( SuperHero.class );
lhc.getMembers().clear();
em.remove( lh );
em.remove( lsh );
em.remove( lhc );
em.getTransaction().commit();
}
}