| 
4 | 4 |  */  | 
5 | 5 | package org.hibernate.orm.test.hql;  | 
6 | 6 | 
 
  | 
7 |  | -import java.util.List;  | 
8 |  | - | 
9 | 7 | import org.hibernate.testing.orm.domain.gambit.EntityOfBasics;  | 
10 | 8 | import org.hibernate.testing.orm.junit.DomainModel;  | 
11 | 9 | import org.hibernate.testing.orm.junit.Jira;  | 
 | 
14 | 12 | import org.junit.jupiter.api.BeforeAll;  | 
15 | 13 | import org.junit.jupiter.api.Test;  | 
16 | 14 | 
 
  | 
 | 15 | +import java.util.List;  | 
 | 16 | + | 
17 | 17 | import static org.assertj.core.api.Assertions.assertThat;  | 
18 | 18 | 
 
  | 
19 | 19 | @DomainModel(annotatedClasses = {  | 
 | 
22 | 22 | })  | 
23 | 23 | @SessionFactory  | 
24 | 24 | @Jira("https://hibernate.atlassian.net/browse/HHH-16861")  | 
 | 25 | +@Jira("https://hibernate.atlassian.net/browse/HHH-18708")  | 
25 | 26 | public class EnumTest {  | 
26 | 27 | 
 
  | 
27 | 28 | 
 
  | 
@@ -97,4 +98,56 @@ public void testOrdinalFunctionOnStringEnum(SessionFactoryScope scope) {  | 
97 | 98 | 
 
  | 
98 | 99 | 	}  | 
99 | 100 | 
 
  | 
 | 101 | +	@Test  | 
 | 102 | +	public void testStringFunctionOnStringEnum(SessionFactoryScope scope) {  | 
 | 103 | +		scope.inTransaction( session -> {  | 
 | 104 | + | 
 | 105 | +			List<String> femaleStringFunction = session.createQuery(  | 
 | 106 | +							"select string(gender) " +  | 
 | 107 | +							"from EntityOfBasics e " +  | 
 | 108 | +							"where e.gender = :gender",  | 
 | 109 | +							String.class  | 
 | 110 | +					)  | 
 | 111 | +					.setParameter( "gender", EntityOfBasics.Gender.FEMALE )  | 
 | 112 | +					.getResultList();  | 
 | 113 | + | 
 | 114 | +			List<String> femaleWithCast = session.createQuery(  | 
 | 115 | +							"select cast(e.gender as String) " +  | 
 | 116 | +							"from EntityOfBasics e " +  | 
 | 117 | +							"where e.gender = :gender",  | 
 | 118 | +							String.class  | 
 | 119 | +					)  | 
 | 120 | +					.setParameter( "gender", EntityOfBasics.Gender.FEMALE )  | 
 | 121 | +					.getResultList();  | 
 | 122 | + | 
 | 123 | +			assertThat( femaleStringFunction ).hasSize( 1 );  | 
 | 124 | +			assertThat( femaleStringFunction ).hasSameElementsAs( femaleWithCast );  | 
 | 125 | +		} );  | 
 | 126 | + | 
 | 127 | +	}  | 
 | 128 | + | 
 | 129 | +	@Test  | 
 | 130 | +	public void testStringFunctionOnOrdinalEnum(SessionFactoryScope scope) {  | 
 | 131 | +		scope.inTransaction( session -> {  | 
 | 132 | +			//tag::hql-string-function-example[]  | 
 | 133 | +			// enum Gender {  | 
 | 134 | +			//	MALE,  | 
 | 135 | +			//	FEMALE,  | 
 | 136 | +			//	OTHER  | 
 | 137 | +			//}  | 
 | 138 | +			List<String> femaleStringFromString = session.createQuery(  | 
 | 139 | +							"select string(ordinalGender)" +  | 
 | 140 | +							"from EntityOfBasics e " +  | 
 | 141 | +							"where e.ordinalGender = :gender",  | 
 | 142 | +							String.class )  | 
 | 143 | +					.setParameter( "gender", EntityOfBasics.Gender.FEMALE )  | 
 | 144 | +					.getResultList();  | 
 | 145 | +			//	This will return List.of(1)  | 
 | 146 | +			//end::hql-string-function-example[]  | 
 | 147 | +			assertThat( femaleStringFromString ).hasSize( 1 );  | 
 | 148 | +			assertThat( femaleStringFromString ).hasSameElementsAs( List.of( "FEMALE" ) );  | 
 | 149 | +		} );  | 
 | 150 | + | 
 | 151 | +	}  | 
 | 152 | + | 
100 | 153 | }  | 
0 commit comments