/*
* 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.namingstrategy.ejb3joincolumn;
import java.util.Iterator;
import java.util.Locale;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataBuilder;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.cfg.Environment;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
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;
import static org.junit.Assert.assertTrue;
/**
* Tests {@link org.hibernate.cfg.Ejb3JoinColumn} and {@link org.hibernate.boot.model.naming.PhysicalNamingStrategy}
* interaction
*
* @author Anton Wimmer
* @author Steve Ebersole
*/
public class Tests extends BaseUnitTestCase {
@Test
@TestForIssue( jiraKey = "HHH-9961" )
public void testJpaJoinColumnPhysicalNaming() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySettings( Environment.getProperties() )
.build();
try {
final MetadataSources metadataSources = new MetadataSources( ssr );
metadataSources.addAnnotatedClass( Language.class );
final MetadataBuilder metadataBuilder = metadataSources.getMetadataBuilder();
metadataBuilder.applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE );
metadataBuilder.applyPhysicalNamingStrategy( PhysicalNamingStrategyImpl.INSTANCE );
final Metadata metadata = metadataBuilder.build();
( ( MetadataImplementor) metadata ).validate();
final PersistentClass languageBinding = metadata.getEntityBinding( Language.class.getName() );
final Property property = languageBinding.getProperty( "fallBack" );
Iterator itr = property.getValue().getColumnIterator();
assertTrue( itr.hasNext() );
final Column column = (Column) itr.next();
assertFalse( itr.hasNext() );
assertEquals( "C_FALLBACK_ID", column.getName().toUpperCase( Locale.ROOT ) );
}
finally {
StandardServiceRegistryBuilder.destroy( ssr );
}
}
}