/* * 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.foreignkeys.disabled; import java.util.EnumSet; import java.util.Map; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.mapping.ForeignKey; import org.hibernate.mapping.Table; import org.hibernate.mapping.Table.ForeignKeyKey; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.hbm2ddl.SchemaUpdate; import org.hibernate.tool.schema.TargetType; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseUnitTestCase; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; /** * @author Steve Ebersole */ public class DisabledForeignKeyTest extends BaseUnitTestCase { @Test @TestForIssue( jiraKey = "HHH-9704" ) public void basicTests() { StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder(); StandardServiceRegistry standardRegistry = registryBuilder.build(); try { final MetadataSources sources = new MetadataSources( standardRegistry ); sources.addAnnotatedClass( ManyToManyOwner.class ); sources.addAnnotatedClass( ManyToManyTarget.class ); final MetadataImplementor metadata = (MetadataImplementor) sources.buildMetadata(); metadata.validate(); new SchemaExport().execute( EnumSet.of( TargetType.STDOUT ), SchemaExport.Action.CREATE, metadata ); int fkCount = 0; for ( Table table : metadata.collectTableMappings() ) { for ( Map.Entry<ForeignKeyKey, ForeignKey> entry : table.getForeignKeys().entrySet() ) { assertFalse( "Creation for ForeignKey [" + entry.getKey() + "] was not disabled", entry.getValue().isCreationEnabled() ); fkCount++; } } // ultimately I want to actually create the ForeignKet reference, but simply disable its creation // via ForeignKet#disableCreation() assertEquals( "Was expecting 4 FKs", 0, fkCount ); } finally { StandardServiceRegistryBuilder.destroy( standardRegistry ); } } @Test @TestForIssue( jiraKey = "HHH-9704" ) public void expandedTests() { StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder(); StandardServiceRegistry standardRegistry = registryBuilder.build(); try { final MetadataSources sources = new MetadataSources( standardRegistry ); sources.addAnnotatedClass( ManyToManyOwner.class ); sources.addAnnotatedClass( ManyToManyTarget.class ); final MetadataImplementor metadata = (MetadataImplementor) sources.buildMetadata(); metadata.validate(); // export the schema new SchemaExport().execute( EnumSet.of( TargetType.DATABASE ), SchemaExport.Action.BOTH, metadata ); try { // update the schema new SchemaUpdate().execute( EnumSet.of( TargetType.DATABASE ), metadata ); } finally { // drop the schema new SchemaExport().execute( EnumSet.of( TargetType.DATABASE ), SchemaExport.Action.DROP, metadata ); } } finally { StandardServiceRegistryBuilder.destroy( standardRegistry ); } } }