/* * 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.nationalized; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.AvailableSettings; import org.hibernate.dialect.PostgreSQL81Dialect; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; import org.hibernate.type.CharacterNCharType; import org.hibernate.type.CharacterType; import org.hibernate.type.StringNVarcharType; import org.hibernate.type.StringType; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseUnitTestCase; import org.junit.Test; import static org.junit.Assert.assertSame; /** * Test the use of {@link org.hibernate.cfg.AvailableSettings#USE_NATIONALIZED_CHARACTER_DATA} * to indicate that nationalized character data should be used. * * @author Steve Ebersole */ public class UseNationalizedCharDataSettingTest extends BaseUnitTestCase { @Test @TestForIssue( jiraKey = "HHH-10528" ) public void testSetting() { final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() .applySetting( AvailableSettings.USE_NATIONALIZED_CHARACTER_DATA, true ) .build(); try { final MetadataSources ms = new MetadataSources( ssr ); ms.addAnnotatedClass( NationalizedBySettingEntity.class ); final Metadata metadata = ms.buildMetadata(); final PersistentClass pc = metadata.getEntityBinding( NationalizedBySettingEntity.class.getName() ); final Property nameAttribute = pc.getProperty( "name" ); if(metadata.getDatabase().getDialect() instanceof PostgreSQL81Dialect ){ // See issue HHH-10693 assertSame( StringType.INSTANCE, nameAttribute.getType() ); }else { assertSame( StringNVarcharType.INSTANCE, nameAttribute.getType() ); } } finally { StandardServiceRegistryBuilder.destroy( ssr ); } } @Test @TestForIssue( jiraKey = "HHH-11205" ) public void testSettingOnCharType() { final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() .applySetting( AvailableSettings.USE_NATIONALIZED_CHARACTER_DATA, true ) .build(); try { final MetadataSources ms = new MetadataSources( ssr ); ms.addAnnotatedClass( NationalizedBySettingEntity.class ); final Metadata metadata = ms.buildMetadata(); final PersistentClass pc = metadata.getEntityBinding( NationalizedBySettingEntity.class.getName() ); final Property nameAttribute = pc.getProperty( "flag" ); if(metadata.getDatabase().getDialect() instanceof PostgreSQL81Dialect ){ assertSame( CharacterType.INSTANCE, nameAttribute.getType() ); }else { assertSame( CharacterNCharType.INSTANCE, nameAttribute.getType() ); } } finally { StandardServiceRegistryBuilder.destroy( ssr ); } } @Entity(name = "NationalizedBySettingEntity") @Table(name = "nationalized_by_setting_entity") public static class NationalizedBySettingEntity { @Id @GeneratedValue private long id; String name; char flag; } }