32
32
33
33
import javax .persistence .EntityManager ;
34
34
import javax .persistence .TypedQuery ;
35
+ import javax .persistence .criteria .CriteriaBuilder ;
35
36
import javax .persistence .criteria .CriteriaQuery ;
36
37
import javax .persistence .criteria .ParameterExpression ;
37
38
import javax .persistence .criteria .Predicate ;
38
39
import javax .persistence .criteria .Root ;
39
40
import javax .persistence .metamodel .SingularAttribute ;
40
41
41
42
import org .hibernate .ejb .test .BaseEntityManagerFunctionalTestCase ;
42
- import org .hibernate .ejb .criteria .basic .Payment_ ;
43
43
import org .hibernate .testing .TestForIssue ;
44
44
import org .junit .Test ;
45
45
46
46
/**
47
47
* @author Steve Ebersole
48
48
*/
49
49
public class BasicCriteriaUsageTest extends BaseEntityManagerFunctionalTestCase {
50
+
50
51
@ Override
51
52
public Class [] getAnnotatedClasses () {
52
53
return new Class [] { Wall .class , Payment .class };
@@ -59,9 +60,7 @@ public void testParameterCollection() {
59
60
CriteriaQuery <Wall > criteria = em .getCriteriaBuilder ().createQuery ( Wall .class );
60
61
Root <Wall > from = criteria .from ( Wall .class );
61
62
ParameterExpression param = em .getCriteriaBuilder ().parameter ( String .class );
62
- SingularAttribute <? super Wall ,?> colorAttribute = em .getMetamodel ()
63
- .entity ( Wall .class )
64
- .getDeclaredSingularAttribute ( "color" );
63
+ SingularAttribute <? super Wall , ?> colorAttribute = em .getMetamodel ().entity ( Wall .class ).getDeclaredSingularAttribute ( "color" );
65
64
assertNotNull ( "metamodel returned null singular attribute" , colorAttribute );
66
65
Predicate predicate = em .getCriteriaBuilder ().equal ( from .get ( colorAttribute ), param );
67
66
criteria .where ( predicate );
@@ -105,4 +104,26 @@ public void testDateCompositeCustomType() {
105
104
em .getTransaction ().commit ();
106
105
em .close ();
107
106
}
107
+
108
+ @ Test
109
+ @ TestForIssue (jiraKey = "HHH-8373" )
110
+ public void testFunctionCriteria () {
111
+ Wall wall = new Wall ();
112
+ wall .setColor ( "yellow" );
113
+ EntityManager em = getOrCreateEntityManager ();
114
+ em .getTransaction ().begin ();
115
+ em .persist ( wall );
116
+
117
+ CriteriaBuilder cb = em .getCriteriaBuilder ();
118
+ CriteriaQuery <Wall > query = cb .createQuery ( Wall .class );
119
+ Root <Wall > root = query .from ( Wall .class );
120
+
121
+ query .select ( root ).where ( cb .equal ( root .get ( "color" ), cb .lower ( cb .literal ( "YELLOW" ) ) ) );
122
+
123
+ Wall resultItem = em .createQuery ( query ).getSingleResult ();
124
+ assertNotNull ( resultItem );
125
+
126
+ em .getTransaction ().commit ();
127
+ em .close ();
128
+ }
108
129
}
0 commit comments