10
10
import javax .persistence .EntityManager ;
11
11
import javax .persistence .Id ;
12
12
import javax .persistence .Table ;
13
+ import javax .persistence .Tuple ;
13
14
import javax .persistence .criteria .CriteriaBuilder ;
14
15
import javax .persistence .criteria .CriteriaQuery ;
16
+ import javax .persistence .criteria .Expression ;
15
17
import javax .persistence .criteria .Path ;
16
18
import javax .persistence .criteria .Root ;
17
19
18
20
import org .hibernate .jpa .test .BaseEntityManagerFunctionalTestCase ;
19
21
20
22
import org .junit .Test ;
21
23
24
+ import org .hibernate .testing .TestForIssue ;
25
+
22
26
import static javax .persistence .criteria .CriteriaBuilder .SimpleCase ;
23
27
24
28
/**
@@ -34,6 +38,88 @@ protected Class<?>[] getAnnotatedClasses() {
34
38
return new Class [] {Customer .class };
35
39
}
36
40
41
+ @ Test
42
+ @ TestForIssue (jiraKey = "HHH-9343" )
43
+ public void testCaseStringResult () {
44
+ EntityManager em = getOrCreateEntityManager ();
45
+ CriteriaBuilder builder = em .getCriteriaBuilder ();
46
+
47
+ CriteriaQuery <Tuple > query = builder .createTupleQuery ();
48
+ Root <Customer > root = query .from ( Customer .class );
49
+
50
+ Path <String > emailPath = root .get ( "email" );
51
+ CriteriaBuilder .Case <String > selectCase = builder .selectCase ();
52
+ selectCase .when ( builder .greaterThan ( builder .length ( emailPath ), 13 ), "Long" );
53
+ selectCase .when ( builder .greaterThan ( builder .length ( emailPath ), 12 ), "Normal" );
54
+ Expression <String > emailType = selectCase .otherwise ( "Unknown" );
55
+
56
+ query .multiselect ( emailPath , emailType );
57
+
58
+ em .createQuery ( query ).getResultList ();
59
+ }
60
+
61
+ @ Test
62
+ @ TestForIssue (jiraKey = "HHH-9343" )
63
+ public void testCaseIntegerResult () {
64
+ EntityManager em = getOrCreateEntityManager ();
65
+ em .getTransaction ().begin ();
66
+
67
+ CriteriaBuilder builder = em .getCriteriaBuilder ();
68
+
69
+ CriteriaQuery <Tuple > query = builder .createTupleQuery ();
70
+ Root <Customer > root = query .from ( Customer .class );
71
+
72
+ Path <String > emailPath = root .get ( "email" );
73
+ CriteriaBuilder .Case <Integer > selectCase = builder .selectCase ();
74
+ selectCase .when ( builder .greaterThan ( builder .length ( emailPath ), 13 ), 2 );
75
+ selectCase .when ( builder .greaterThan ( builder .length ( emailPath ), 12 ), 1 );
76
+ Expression <Integer > emailType = selectCase .otherwise ( 0 );
77
+
78
+ query .multiselect ( emailPath , emailType );
79
+
80
+ em .createQuery ( query ).getResultList ();
81
+ }
82
+
83
+ @ Test
84
+ @ TestForIssue (jiraKey = "HHH-9343" )
85
+ public void testCaseLiteralResult () {
86
+ EntityManager em = getOrCreateEntityManager ();
87
+ em .getTransaction ().begin ();
88
+
89
+ CriteriaBuilder cb = em .getCriteriaBuilder ();
90
+ CriteriaQuery <Boolean > cq = cb .createQuery ( Boolean .class );
91
+ Root <Customer > expense_ = cq .from ( Customer .class );
92
+ em .createQuery (
93
+ cq .distinct ( true ).where (
94
+ cb .equal ( expense_ .get ( "email" ), "@hibernate.com" )
95
+ ).multiselect (
96
+ cb .selectCase ()
97
+ .when ( cb .gt ( cb .count ( expense_ ), cb .literal ( 0L ) ), cb .literal ( true ) )
98
+ .otherwise ( cb .literal ( false ) )
99
+ )
100
+ ).getSingleResult ();
101
+ }
102
+
103
+ @ Test
104
+ @ TestForIssue (jiraKey = "HHH-9343" )
105
+ public void testCaseLiteralResult2 () {
106
+ EntityManager em = getOrCreateEntityManager ();
107
+ em .getTransaction ().begin ();
108
+
109
+ CriteriaBuilder cb = em .getCriteriaBuilder ();
110
+ CriteriaQuery <Boolean > cq = cb .createQuery ( Boolean .class );
111
+ Root <Customer > expense_ = cq .from ( Customer .class );
112
+ em .createQuery (
113
+ cq .distinct ( true ).where (
114
+ cb .equal ( expense_ .get ( "email" ), "@hibernate.com" )
115
+ ).multiselect (
116
+ cb .selectCase ()
117
+ .when ( cb .gt ( cb .count ( expense_ ), cb .literal ( 0L ) ), true )
118
+ .otherwise ( false )
119
+ )
120
+ ).getSingleResult ();
121
+ }
122
+
37
123
@ Test
38
124
public void testCaseInOrderBy () {
39
125
EntityManager em = getOrCreateEntityManager ();
0 commit comments