3232
3333import javax .persistence .EntityManager ;
3434import javax .persistence .TypedQuery ;
35+ import javax .persistence .criteria .CriteriaBuilder ;
3536import javax .persistence .criteria .CriteriaQuery ;
3637import javax .persistence .criteria .ParameterExpression ;
3738import javax .persistence .criteria .Predicate ;
3839import javax .persistence .criteria .Root ;
3940import javax .persistence .metamodel .SingularAttribute ;
4041
4142import org .hibernate .ejb .test .BaseEntityManagerFunctionalTestCase ;
42- import org .hibernate .ejb .criteria .basic .Payment_ ;
4343import org .hibernate .testing .TestForIssue ;
4444import org .junit .Test ;
4545
4646/**
4747 * @author Steve Ebersole
4848 */
4949public class BasicCriteriaUsageTest extends BaseEntityManagerFunctionalTestCase {
50+
5051 @ Override
5152 public Class [] getAnnotatedClasses () {
5253 return new Class [] { Wall .class , Payment .class };
@@ -59,9 +60,7 @@ public void testParameterCollection() {
5960 CriteriaQuery <Wall > criteria = em .getCriteriaBuilder ().createQuery ( Wall .class );
6061 Root <Wall > from = criteria .from ( Wall .class );
6162 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" );
6564 assertNotNull ( "metamodel returned null singular attribute" , colorAttribute );
6665 Predicate predicate = em .getCriteriaBuilder ().equal ( from .get ( colorAttribute ), param );
6766 criteria .where ( predicate );
@@ -105,4 +104,26 @@ public void testDateCompositeCustomType() {
105104 em .getTransaction ().commit ();
106105 em .close ();
107106 }
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+ }
108129}
0 commit comments