/*
* 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.id.sequence;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.model.relational.Namespace;
import org.hibernate.boot.model.relational.Sequence;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.testing.DialectChecks;
import org.hibernate.testing.RequiresDialectFeature;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Steve Ebersole
*/
@RequiresDialectFeature(value= DialectChecks.SupportsSequences.class, jiraKey = "HHH-10320" )
public class SequenceExportTest extends BaseUnitTestCase {
private StandardServiceRegistry ssr;
@Before
public void prepare() {
ssr = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "true" )
.build();
}
@After
public void destroy() {
StandardServiceRegistryBuilder.destroy( ssr );
}
@Test
@TestForIssue( jiraKey = "HHH-9936" )
public void testMultipleUsesOfDefaultSequenceName() {
final MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
.addAnnotatedClass( Entity1.class )
.addAnnotatedClass( Entity2.class )
.buildMetadata();
metadata.validate();
int namespaceCount = 0;
int sequenceCount = 0;
for ( Namespace namespace : metadata.getDatabase().getNamespaces() ) {
namespaceCount++;
for ( Sequence sequence : namespace.getSequences() ) {
sequenceCount++;
}
}
assertEquals( 1, namespaceCount );
assertEquals( 1, sequenceCount );
}
@Test
@TestForIssue( jiraKey = "HHH-9936" )
public void testMultipleUsesOfExplicitSequenceName() {
final MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
.addAnnotatedClass( Entity3.class )
.addAnnotatedClass( Entity4.class )
.buildMetadata();
metadata.validate();
int namespaceCount = 0;
int sequenceCount = 0;
for ( Namespace namespace : metadata.getDatabase().getNamespaces() ) {
namespaceCount++;
for ( Sequence sequence : namespace.getSequences() ) {
sequenceCount++;
}
}
assertEquals( 1, namespaceCount );
assertEquals( 1, sequenceCount );
}
@Entity( name = "Entity1" )
@Table( name = "Entity1" )
public static class Entity1 {
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE )
public Integer id;
}
@Entity( name = "Entity2" )
@Table( name = "Entity2" )
public static class Entity2 {
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE )
public Integer id;
}
@Entity( name = "Entity3" )
@Table( name = "Entity3" )
public static class Entity3 {
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE )
@SequenceGenerator( name = "my_sequence" )
public Integer id;
}
@Entity( name = "Entity4" )
@Table( name = "Entity4" )
public static class Entity4 {
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE )
@SequenceGenerator( name = "my_sequence" )
public Integer id;
}
}