Re-enabled additional tests

This commit is contained in:
Andrea Boriero 2020-06-24 16:17:45 +01:00
parent b84d41a66c
commit d85bf402e3
7 changed files with 457 additions and 391 deletions

View File

@ -4,7 +4,7 @@
* 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.test.joinedsubclass;
package org.hibernate.orm.test.joinedsubclass;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
@ -13,27 +13,31 @@ import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
import static org.junit.Assert.assertThat;
/**
* @author Andrea Boriero
*/
public class JoinedSubclassWithEmbeddableTest extends BaseCoreFunctionalTestCase {
@DomainModel(
annotatedClasses = {
JoinedSubclassWithEmbeddableTest.BaseEntity.class,
JoinedSubclassWithEmbeddableTest.ConcreteEntity.class
}
)
@SessionFactory
public class JoinedSubclassWithEmbeddableTest {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] {BaseEntity.class, ConcreteEntity.class};
}
@Before
public void setUp() {
doInHibernate( this::sessionFactory, session -> {
@BeforeEach
public void setUp(SessionFactoryScope scope) {
scope.inTransaction( session -> {
ConcreteEntity entity = new ConcreteEntity();
entity.setId( 1L );
entity.setField( "field_base" );
@ -47,14 +51,15 @@ public class JoinedSubclassWithEmbeddableTest extends BaseCoreFunctionalTestCase
@Test
@TestForIssue(jiraKey = "HHH-10920")
public void testEmbeddedFieldIsNotNull() {
doInHibernate( this::sessionFactory, session -> {
public void testEmbeddedFieldIsNotNull(SessionFactoryScope scope) {
scope.inTransaction( session -> {
final ConcreteEntity entity = session.get( ConcreteEntity.class, 1L );
assertThat( entity.getEmbedded().getField(), is( "field_embedded" ) );
assertThat( entity.getField(), is( "field_base" ) );
entity.getEmbedded().setField( "field_subclass" );
} );
doInHibernate( this::sessionFactory, session -> {
scope.inTransaction( session -> {
final ConcreteEntity entity = session.get( ConcreteEntity.class, 1L );
assertThat( entity.getEmbedded().getField(), is( "field_subclass" ) );
assertThat( entity.getField(), is( "field_base" ) );

View File

@ -0,0 +1,138 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* 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.orm.test.joinedsubclass;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
/**
* @author Steve Ebersole
*/
@TestForIssue(jiraKey = "HHH-6911")
@DomainModel(
annotatedClasses = {
JoinedSubclassWithExplicitDiscriminatorTest.Animal.class,
JoinedSubclassWithExplicitDiscriminatorTest.Cat.class,
JoinedSubclassWithExplicitDiscriminatorTest.Dog.class
}
)
@SessionFactory
public class JoinedSubclassWithExplicitDiscriminatorTest {
@Test
public void metadataAssertions(SessionFactoryScope scope) {
EntityPersister p = scope.getSessionFactory().getEntityPersister( Dog.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister dogPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "string", dogPersister.getDiscriminatorType().getName() );
assertEquals( "type", dogPersister.getDiscriminatorColumnName() );
assertEquals( "dog", dogPersister.getDiscriminatorValue() );
p = scope.getSessionFactory().getEntityPersister( Cat.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister catPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "string", catPersister.getDiscriminatorType().getName() );
assertEquals( "type", catPersister.getDiscriminatorColumnName() );
assertEquals( "cat", catPersister.getDiscriminatorValue() );
}
@Test
public void basicUsageTest(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
session.save( new Cat( 1 ) );
session.save( new Dog( 2 ) );
}
);
scope.inTransaction(
session -> {
session.createQuery( "from Animal" ).list();
Cat cat = session.get( Cat.class, 1 );
assertNotNull( cat );
session.delete( cat );
Dog dog = session.get( Dog.class, 2 );
assertNotNull( dog );
session.delete( dog );
}
);
}
public <T> T assertTyping(Class<T> expectedType, Object value) {
if ( ! expectedType.isInstance( value ) ) {
fail(
String.format(
"Expecting value of type [%s], but found [%s]",
expectedType.getName(),
value == null ? "<null>" : value
)
);
}
return (T) value;
}
@Entity(name = "Animal")
@Table(name = "animal")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "???animal???")
public static abstract class Animal {
@Id
public Integer id;
protected Animal() {
}
protected Animal(Integer id) {
this.id = id;
}
}
@Entity(name = "Cat")
@DiscriminatorValue(value = "cat")
public static class Cat extends Animal {
public Cat() {
super();
}
public Cat(Integer id) {
super( id );
}
}
@Entity(name = "Dog")
@DiscriminatorValue(value = "dog")
public static class Dog extends Animal {
public Dog() {
super();
}
public Dog(Integer id) {
super( id );
}
}
}

View File

@ -0,0 +1,146 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* 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.orm.test.joinedsubclass;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.ServiceRegistry;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
/**
* @author Steve Ebersole
*/
@TestForIssue(jiraKey = "HHH-6911")
@DomainModel(
annotatedClasses = {
JoinedSubclassWithIgnoredExplicitDiscriminatorTest.Animal.class,
JoinedSubclassWithIgnoredExplicitDiscriminatorTest.Cat.class,
JoinedSubclassWithIgnoredExplicitDiscriminatorTest.Dog.class
}
)
@SessionFactory
@ServiceRegistry(
settings =
@ServiceRegistry.Setting(
name = AvailableSettings.IGNORE_EXPLICIT_DISCRIMINATOR_COLUMNS_FOR_JOINED_SUBCLASS,
value = "true"))
public class JoinedSubclassWithIgnoredExplicitDiscriminatorTest {
@Test
public void metadataAssertions(SessionFactoryScope scope) {
EntityPersister p = scope.getSessionFactory().getEntityPersister( Dog.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister dogPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "integer", dogPersister.getDiscriminatorType().getName() );
assertEquals( "clazz_", dogPersister.getDiscriminatorColumnName() );
assertTrue( Integer.class.isInstance( dogPersister.getDiscriminatorValue() ) );
p = scope.getSessionFactory().getEntityPersister( Cat.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister catPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "integer", catPersister.getDiscriminatorType().getName() );
assertEquals( "clazz_", catPersister.getDiscriminatorColumnName() );
assertTrue( Integer.class.isInstance( catPersister.getDiscriminatorValue() ) );
}
@Test
public void basicUsageTest(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
session.save( new Cat( 1 ) );
session.save( new Dog( 2 ) );
}
);
scope.inTransaction(
session -> {
session.createQuery( "from Animal" ).list();
Cat cat = session.get( Cat.class, 1 );
assertNotNull( cat );
session.delete( cat );
Dog dog = session.get( Dog.class, 2 );
assertNotNull( dog );
session.delete( dog );
}
);
}
public <T> T assertTyping(Class<T> expectedType, Object value) {
if ( !expectedType.isInstance( value ) ) {
fail(
String.format(
"Expecting value of type [%s], but found [%s]",
expectedType.getName(),
value == null ? "<null>" : value
)
);
}
return (T) value;
}
@Entity(name = "Animal")
@Table(name = "animal")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "???animal???")
public static abstract class Animal {
@Id
public Integer id;
protected Animal() {
}
protected Animal(Integer id) {
this.id = id;
}
}
@Entity(name = "Cat")
@DiscriminatorValue(value = "cat")
public static class Cat extends Animal {
public Cat() {
super();
}
public Cat(Integer id) {
super( id );
}
}
@Entity(name = "Dog")
@DiscriminatorValue(value = "dog")
public static class Dog extends Animal {
public Dog() {
super();
}
public Dog(Integer id) {
super( id );
}
}
}

View File

@ -0,0 +1,150 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* 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.orm.test.joinedsubclass;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Ejb3DiscriminatorColumn;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.ServiceRegistry;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
/**
* @author Steve Ebersole
*/
@TestForIssue(jiraKey = "HHH-6911")
@DomainModel(
annotatedClasses = {
JoinedSubclassWithImplicitDiscriminatorTest.Animal.class,
JoinedSubclassWithImplicitDiscriminatorTest.Cat.class,
JoinedSubclassWithImplicitDiscriminatorTest.Dog.class
}
)
@SessionFactory
@ServiceRegistry(
settings =
@ServiceRegistry.Setting(
name = AvailableSettings.IMPLICIT_DISCRIMINATOR_COLUMNS_FOR_JOINED_SUBCLASS,
value = "true"))
public class JoinedSubclassWithImplicitDiscriminatorTest {
@Test
public void metadataAssertions(SessionFactoryScope scope) {
EntityPersister p = scope.getSessionFactory().getEntityPersister( Dog.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister dogPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals(
Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE,
dogPersister.getDiscriminatorType().getName()
);
assertEquals(
Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_COLUMN_NAME,
dogPersister.getDiscriminatorColumnName()
);
assertEquals( "Dog", dogPersister.getDiscriminatorValue() );
p = scope.getSessionFactory().getEntityPersister( Cat.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister catPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals(
Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE,
catPersister.getDiscriminatorType().getName()
);
assertEquals(
Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_COLUMN_NAME,
catPersister.getDiscriminatorColumnName()
);
assertEquals( "Cat", catPersister.getDiscriminatorValue() );
}
@Test
public void basicUsageTest(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
session.save( new Cat( 1 ) );
session.save( new Dog( 2 ) );
}
);
scope.inTransaction(
session -> {
session.createQuery( "from Animal" ).list();
Cat cat = (Cat) session.get( Cat.class, 1 );
assertNotNull( cat );
session.delete( cat );
Dog dog = (Dog) session.get( Dog.class, 2 );
assertNotNull( dog );
session.delete( dog );
}
);
}
public <T> T assertTyping(Class<T> expectedType, Object value) {
if ( !expectedType.isInstance( value ) ) {
fail(
String.format(
"Expecting value of type [%s], but found [%s]",
expectedType.getName(),
value == null ? "<null>" : value
)
);
}
return (T) value;
}
@Entity(name = "Animal")
@Table(name = "animal")
@Inheritance(strategy = InheritanceType.JOINED)
public static abstract class Animal {
@Id
public Integer id;
protected Animal() {
}
protected Animal(Integer id) {
this.id = id;
}
}
@Entity(name = "Cat")
public static class Cat extends Animal {
public Cat() {
super();
}
public Cat(Integer id) {
super( id );
}
}
@Entity(name = "Dog")
public static class Dog extends Animal {
public Dog() {
super();
}
public Dog(Integer id) {
super( id );
}
}
}

View File

@ -1,121 +0,0 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* 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.test.joinedsubclass;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.hibernate.Session;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.persister.entity.Loadable;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.hibernate.testing.junit4.ExtraAssertions;
import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* @author Steve Ebersole
*/
@TestForIssue( jiraKey = "HHH-6911" )
public class JoinedSubclassWithExplicitDiscriminatorTest extends BaseCoreFunctionalTestCase {
@Entity( name = "Animal" )
@Table( name = "animal" )
@Inheritance( strategy = InheritanceType.JOINED )
@DiscriminatorColumn( name = "type", discriminatorType = DiscriminatorType.STRING )
@DiscriminatorValue( value = "???animal???" )
public static abstract class Animal {
@Id
public Integer id;
protected Animal() {
}
protected Animal(Integer id) {
this.id = id;
}
}
@Entity( name = "Cat" )
@DiscriminatorValue( value = "cat" )
public static class Cat extends Animal {
public Cat() {
super();
}
public Cat(Integer id) {
super( id );
}
}
@Entity( name = "Dog" )
@DiscriminatorValue( value = "dog" )
public static class Dog extends Animal {
public Dog() {
super();
}
public Dog(Integer id) {
super( id );
}
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] { Animal.class, Cat.class, Dog.class };
}
@Test
public void metadataAssertions() {
EntityPersister p = sessionFactory().getEntityPersister( Dog.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister dogPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "string", dogPersister.getDiscriminatorType().getName() );
assertEquals( "type", dogPersister.getDiscriminatorColumnName() );
assertEquals( "dog", dogPersister.getDiscriminatorValue() );
p = sessionFactory().getEntityPersister( Cat.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister catPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "string", catPersister.getDiscriminatorType().getName() );
assertEquals( "type", catPersister.getDiscriminatorColumnName() );
assertEquals( "cat", catPersister.getDiscriminatorValue() );
}
@Test
public void basicUsageTest() {
Session session = openSession();
session.beginTransaction();
session.save( new Cat( 1 ) );
session.save( new Dog( 2 ) );
session.getTransaction().commit();
session.close();
session = openSession();
session.beginTransaction();
session.createQuery( "from Animal" ).list();
Cat cat = (Cat) session.get( Cat.class, 1 );
assertNotNull( cat );
session.delete( cat );
Dog dog = (Dog) session.get( Dog.class, 2 );
assertNotNull( dog );
session.delete( dog );
session.getTransaction().commit();
session.close();
}
}

View File

@ -1,128 +0,0 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* 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.test.joinedsubclass;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.hibernate.Session;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
/**
* @author Steve Ebersole
*/
@TestForIssue( jiraKey = "HHH-6911" )
public class JoinedSubclassWithIgnoredExplicitDiscriminatorTest extends BaseCoreFunctionalTestCase {
@Entity( name = "Animal" )
@Table( name = "animal" )
@Inheritance( strategy = InheritanceType.JOINED )
@DiscriminatorColumn( name = "type", discriminatorType = DiscriminatorType.STRING )
@DiscriminatorValue( value = "???animal???" )
public static abstract class Animal {
@Id
public Integer id;
protected Animal() {
}
protected Animal(Integer id) {
this.id = id;
}
}
@Entity( name = "Cat" )
@DiscriminatorValue( value = "cat" )
public static class Cat extends Animal {
public Cat() {
super();
}
public Cat(Integer id) {
super( id );
}
}
@Entity( name = "Dog" )
@DiscriminatorValue( value = "dog" )
public static class Dog extends Animal {
public Dog() {
super();
}
public Dog(Integer id) {
super( id );
}
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] { Animal.class, Cat.class, Dog.class };
}
@Override
protected void configure(Configuration configuration) {
super.configure( configuration );
configuration.setProperty( AvailableSettings.IGNORE_EXPLICIT_DISCRIMINATOR_COLUMNS_FOR_JOINED_SUBCLASS, "true" );
}
@Test
public void metadataAssertions() {
EntityPersister p = sessionFactory().getEntityPersister( Dog.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister dogPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "integer", dogPersister.getDiscriminatorType().getName() );
assertEquals( "clazz_", dogPersister.getDiscriminatorColumnName() );
assertTrue( Integer.class.isInstance( dogPersister.getDiscriminatorValue() ) );
p = sessionFactory().getEntityPersister( Cat.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister catPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( "integer", catPersister.getDiscriminatorType().getName() );
assertEquals( "clazz_", catPersister.getDiscriminatorColumnName() );
assertTrue( Integer.class.isInstance( catPersister.getDiscriminatorValue() ) );
}
@Test
public void basicUsageTest() {
Session session = openSession();
session.beginTransaction();
session.save( new Cat( 1 ) );
session.save( new Dog( 2 ) );
session.getTransaction().commit();
session.close();
session = openSession();
session.beginTransaction();
session.createQuery( "from Animal" ).list();
Cat cat = (Cat) session.get( Cat.class, 1 );
assertNotNull( cat );
session.delete( cat );
Dog dog = (Dog) session.get( Dog.class, 2 );
assertNotNull( dog );
session.delete( dog );
session.getTransaction().commit();
session.close();
}
}

View File

@ -1,124 +0,0 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* 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.test.joinedsubclass;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.hibernate.Session;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Ejb3DiscriminatorColumn;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* @author Steve Ebersole
*/
@TestForIssue( jiraKey = "HHH-6911" )
public class JoinedSubclassWithImplicitDiscriminatorTest extends BaseCoreFunctionalTestCase {
@Entity( name = "Animal" )
@Table( name = "animal" )
@Inheritance( strategy = InheritanceType.JOINED )
public static abstract class Animal {
@Id
public Integer id;
protected Animal() {
}
protected Animal(Integer id) {
this.id = id;
}
}
@Entity( name = "Cat" )
public static class Cat extends Animal {
public Cat() {
super();
}
public Cat(Integer id) {
super( id );
}
}
@Entity( name = "Dog" )
public static class Dog extends Animal {
public Dog() {
super();
}
public Dog(Integer id) {
super( id );
}
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] { Animal.class, Cat.class, Dog.class };
}
@Override
protected void configure(Configuration configuration) {
super.configure( configuration );
configuration.setProperty( AvailableSettings.IMPLICIT_DISCRIMINATOR_COLUMNS_FOR_JOINED_SUBCLASS, "true" );
}
@Test
public void metadataAssertions() {
EntityPersister p = sessionFactory().getEntityPersister( Dog.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister dogPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE, dogPersister.getDiscriminatorType().getName() );
assertEquals( Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_COLUMN_NAME, dogPersister.getDiscriminatorColumnName() );
assertEquals( "Dog", dogPersister.getDiscriminatorValue() );
p = sessionFactory().getEntityPersister( Cat.class.getName() );
assertNotNull( p );
final JoinedSubclassEntityPersister catPersister = assertTyping( JoinedSubclassEntityPersister.class, p );
assertEquals( Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE, catPersister.getDiscriminatorType().getName() );
assertEquals( Ejb3DiscriminatorColumn.DEFAULT_DISCRIMINATOR_COLUMN_NAME, catPersister.getDiscriminatorColumnName() );
assertEquals( "Cat", catPersister.getDiscriminatorValue() );
}
@Test
public void basicUsageTest() {
Session session = openSession();
session.beginTransaction();
session.save( new Cat( 1 ) );
session.save( new Dog( 2 ) );
session.getTransaction().commit();
session.close();
session = openSession();
session.beginTransaction();
session.createQuery( "from Animal" ).list();
Cat cat = (Cat) session.get( Cat.class, 1 );
assertNotNull( cat );
session.delete( cat );
Dog dog = (Dog) session.get( Dog.class, 2 );
assertNotNull( dog );
session.delete( dog );
session.getTransaction().commit();
session.close();
}
}