diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/enums/NamedEnumUserType.java b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/enums/NamedEnumUserType.java new file mode 100644 index 000000000000..c75b73647da8 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/enums/NamedEnumUserType.java @@ -0,0 +1,21 @@ +package org.hibernate.orm.test.mapping.converted.enums; + +import java.util.Properties; + +import org.hibernate.type.EnumType; + +/** + * A simple user type where we force enums to be saved by name, not ordinal + * + * @author gtoison + */ +public class NamedEnumUserType> extends EnumType { + private static final long serialVersionUID = -4176945793071035928L; + + @Override + public void setParameterValues(Properties parameters) { + parameters.setProperty(EnumType.NAMED, "true"); + + super.setParameterValues(parameters); + } +} \ No newline at end of file diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/enums/NamedEnumUserTypeTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/enums/NamedEnumUserTypeTest.java new file mode 100644 index 000000000000..f4355f4f9e83 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/enums/NamedEnumUserTypeTest.java @@ -0,0 +1,48 @@ +/** + * + */ +package org.hibernate.orm.test.mapping.converted.enums; + +import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; + +import org.hibernate.testing.TestForIssue; +import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; +import org.junit.Test; + +/** + * @author gtoison + * + */ +public class NamedEnumUserTypeTest extends BaseCoreFunctionalTestCase { + + @Override + protected String getBaseForMappings() { + return ""; + } + + @Override + protected String[] getMappings() { + return new String[] { "org/hibernate/orm/test/mapping/converted/enums/PersonNamedEnumsUserType.xml" }; + } + + @Override + protected void prepareTest() { + doInHibernate( this::sessionFactory, s -> { + s.persist( Person.person( Gender.MALE, HairColor.BLACK ) ); + } ); + } + + @Override + protected boolean isCleanupTestDataRequired() { + return true; + } + + @Test + @TestForIssue(jiraKey = "HHH-14820") + public void testNamedEnumUserType() { + // This fails because the same instance of NamedEnumUserType is used for both enums + doInHibernate( this::sessionFactory, s -> { + s.createQuery( "from Person p", Person.class ); + } ); + } +} diff --git a/hibernate-core/src/test/resources/org/hibernate/orm/test/mapping/converted/enums/PersonNamedEnumsUserType.xml b/hibernate-core/src/test/resources/org/hibernate/orm/test/mapping/converted/enums/PersonNamedEnumsUserType.xml new file mode 100644 index 000000000000..a0670839c40b --- /dev/null +++ b/hibernate-core/src/test/resources/org/hibernate/orm/test/mapping/converted/enums/PersonNamedEnumsUserType.xml @@ -0,0 +1,30 @@ + + + + + + + org.hibernate.orm.test.mapping.converted.enums.Gender + + + org.hibernate.orm.test.mapping.converted.enums.HairColor + + + + + + + + + + + + + \ No newline at end of file