HHH-10766 Resolve mapping 'type' parameter error

This commit is contained in:
Dgray16 2016-05-24 15:48:30 +03:00 committed by Vlad Mihalcea
parent 0834ab6b1d
commit 50b7882663
5 changed files with 69 additions and 3 deletions

View File

@ -156,7 +156,7 @@ public class EnumType implements EnhancedUserType, DynamicParameterizedType,Logg
return new OrdinalEnumValueMapper(); return new OrdinalEnumValueMapper();
} }
else if ( isCharacterType( type ) ) { else if ( isCharacterType( type ) ) {
return new OrdinalEnumValueMapper(); return new NamedEnumValueMapper();
} }
else { else {
throw new HibernateException( throw new HibernateException(

View File

@ -0,0 +1,46 @@
/*
* 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.enums;
import org.hibernate.Session;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Vlad Mihalcea
*/
public class EnumExplicitTypeTest extends BaseCoreFunctionalTestCase {
protected String[] getMappings() {
return new String[] { "enums/Person.hbm.xml" };
}
@Test
@TestForIssue(jiraKey = "HHH-10766")
public void hbmEnumWithExplicitTypeTest() {
Session s = openSession();
s.getTransaction().begin();
Person painted = Person.person( Gender.MALE, HairColor.BROWN );
painted.setOriginalHairColor( HairColor.BLONDE );
s.persist( painted );
s.getTransaction().commit();
s.clear();
s.getTransaction().begin();
Number id = (Number) session.createNativeQuery(
"select id from Person where originalHairColor = :color" )
.setParameter( "color", HairColor.BLONDE.name() )
.getSingleResult();
assertEquals( 1L, id.longValue() );
s.getTransaction().commit();
s.close();
}
}

View File

@ -23,7 +23,7 @@ public class EnumTypeTest extends BaseCoreFunctionalTestCase {
protected String[] getMappings() { protected String[] getMappings() {
return new String[] { "enums/Person.hbm.xml" }; return new String[] { "enums/Person.hbm.xml" };
} }
@Test @Test
@TestForIssue(jiraKey = "HHH-8153") @TestForIssue(jiraKey = "HHH-8153")
public void hbmEnumTypeTest() { public void hbmEnumTypeTest() {
@ -35,7 +35,7 @@ public class EnumTypeTest extends BaseCoreFunctionalTestCase {
s.persist( Person.person( Gender.FEMALE, HairColor.BLACK ) ); s.persist( Person.person( Gender.FEMALE, HairColor.BLACK ) );
s.getTransaction().commit(); s.getTransaction().commit();
s.clear(); s.clear();
s.getTransaction().begin(); s.getTransaction().begin();
assertEquals(s.createCriteria( Person.class ) assertEquals(s.createCriteria( Person.class )
.add( Restrictions.eq( "gender", Gender.MALE ) ) .add( Restrictions.eq( "gender", Gender.MALE ) )

View File

@ -13,6 +13,8 @@ public class Person {
private HairColor hairColor; private HairColor hairColor;
private HairColor originalHairColor;
public static Person person(Gender gender, HairColor hairColor) { public static Person person(Gender gender, HairColor hairColor) {
Person person = new Person(); Person person = new Person();
person.setGender( gender ); person.setGender( gender );
@ -43,4 +45,12 @@ public class Person {
public void setHairColor(HairColor hairColor) { public void setHairColor(HairColor hairColor) {
this.hairColor = hairColor; this.hairColor = hairColor;
} }
public HairColor getOriginalHairColor() {
return originalHairColor;
}
public void setOriginalHairColor(HairColor originalHairColor) {
this.originalHairColor = originalHairColor;
}
} }

View File

@ -14,16 +14,26 @@
<id name="id" type="long"> <id name="id" type="long">
<generator class="native"></generator> <generator class="native"></generator>
</id> </id>
<property name="gender" not-null="true"> <property name="gender" not-null="true">
<type name="org.hibernate.type.EnumType"> <type name="org.hibernate.type.EnumType">
<param name="enumClass">org.hibernate.test.enums.Gender</param> <param name="enumClass">org.hibernate.test.enums.Gender</param>
<param name="type">12</param> <param name="type">12</param>
</type> </type>
</property> </property>
<property name="hairColor" not-null="true"> <property name="hairColor" not-null="true">
<type name="org.hibernate.type.EnumType"> <type name="org.hibernate.type.EnumType">
<param name="enumClass">org.hibernate.test.enums.HairColor</param> <param name="enumClass">org.hibernate.test.enums.HairColor</param>
</type> </type>
</property> </property>
<property name="originalHairColor">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">org.hibernate.test.enums.HairColor</param>
<param name="type">12</param>
</type>
</property>
</class> </class>
</hibernate-mapping> </hibernate-mapping>