/*
* 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.synchronizedTables;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
/**
* @author Steve Ebersole
*/
public class SynchronizeTableNamingTest extends BaseUnitTestCase {
private StandardServiceRegistry ssr;
@Before
public void before() {
ssr = new StandardServiceRegistryBuilder().build();
}
@After
public void after() {
if ( ssr != null ) {
StandardServiceRegistryBuilder.destroy( ssr );
}
}
@Test
public void testAnnotationHandling() {
final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( DynamicEntity.class )
.getMetadataBuilder()
.applyPhysicalNamingStrategy( TestingPhysicalNamingStrategy.INSTANCE )
.build();
verify( metadata.getEntityBinding( DynamicEntity.class.getName() ) );
}
@Test
public void testHbmXmlHandling() {
final Metadata metadata = new MetadataSources( ssr )
.addResource( "org/hibernate/test/namingstrategy/synchronizedTables/mapping.hbm.xml" )
.getMetadataBuilder()
.applyPhysicalNamingStrategy( TestingPhysicalNamingStrategy.INSTANCE )
.build();
verify( metadata.getEntityBinding( DynamicEntity.class.getName() ) );
}
private void verify(PersistentClass entityBinding) {
assertTrue( entityBinding.getSynchronizedTables().contains( "tbl_a" ) );
}
public static class TestingPhysicalNamingStrategy extends PhysicalNamingStrategyStandardImpl {
/**
* Singleton access
*/
public static final TestingPhysicalNamingStrategy INSTANCE = new TestingPhysicalNamingStrategy();
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
String baseName = name.render( context.getDialect() );
if ( baseName.equals( "table_a" ) ) {
baseName = "tbl_a";
}
return context.getIdentifierHelper().toIdentifier( baseName );
}
}
}