@@ -111,7 +111,30 @@ public void testSimpleNot() {
111
111
Root <Order > orderRoot = orderCriteria .from ( Order .class );
112
112
113
113
orderCriteria .select ( orderRoot );
114
- orderCriteria .where ( builder .not ( builder .equal ( orderRoot .get ( "id" ), "order-1" ) ) );
114
+ final Predicate p = builder .not ( builder .equal ( orderRoot .get ( "id" ), "order-1" ) );
115
+ assertEquals ( Predicate .BooleanOperator .AND , p .getOperator () );
116
+ orderCriteria .where ( p );
117
+
118
+ List <Order > orders = em .createQuery ( orderCriteria ).getResultList ();
119
+ assertEquals ( 2 , orders .size () );
120
+ em .getTransaction ().commit ();
121
+ em .close ();
122
+ }
123
+
124
+ /**
125
+ * Check simple not.
126
+ */
127
+ @ Test
128
+ public void testSimpleNot2 () {
129
+ EntityManager em = getOrCreateEntityManager ();
130
+ em .getTransaction ().begin ();
131
+ CriteriaQuery <Order > orderCriteria = builder .createQuery ( Order .class );
132
+ Root <Order > orderRoot = orderCriteria .from ( Order .class );
133
+
134
+ orderCriteria .select ( orderRoot );
135
+ final Predicate p = builder .equal ( orderRoot .get ( "id" ), "order-1" ).not ();
136
+ assertEquals ( Predicate .BooleanOperator .AND , p .getOperator () );
137
+ orderCriteria .where ( p );
115
138
116
139
List <Order > orders = em .createQuery ( orderCriteria ).getResultList ();
117
140
assertEquals ( 2 , orders .size () );
@@ -132,7 +155,10 @@ public void testComplicatedNotOr() {
132
155
orderCriteria .select ( orderRoot );
133
156
Predicate p1 = builder .equal ( orderRoot .get ( "id" ), "order-1" );
134
157
Predicate p2 = builder .equal ( orderRoot .get ( "id" ), "order-2" );
135
- orderCriteria .where ( builder .not ( builder .or ( p1 , p2 ) ) );
158
+ Predicate compoundPredicate = builder .not ( builder .or ( p1 , p2 ) );
159
+ // negated OR should become an AND
160
+ assertEquals ( Predicate .BooleanOperator .AND , compoundPredicate .getOperator () );
161
+ orderCriteria .where ( compoundPredicate );
136
162
137
163
List <Order > orders = em .createQuery ( orderCriteria ).getResultList ();
138
164
assertEquals ( 1 , orders .size () );
@@ -156,7 +182,10 @@ public void testNotMultipleOr() {
156
182
Predicate p1 = builder .equal ( orderRoot .get ( "id" ), "order-1" );
157
183
Predicate p2 = builder .equal ( orderRoot .get ( "id" ), "order-2" );
158
184
Predicate p3 = builder .equal ( orderRoot .get ( "id" ), "order-3" );
159
- orderCriteria .where ( builder .not ( builder .or ( p1 , p2 , p3 ) ) );
185
+ final Predicate compoundPredicate = builder .or ( p1 , p2 , p3 ).not ();
186
+ // negated OR should become an AND
187
+ assertEquals ( Predicate .BooleanOperator .AND , compoundPredicate .getOperator () );
188
+ orderCriteria .where ( compoundPredicate );
160
189
161
190
List <Order > orders = em .createQuery ( orderCriteria ).getResultList ();
162
191
assertEquals ( 0 , orders .size () );
@@ -177,7 +206,10 @@ public void testComplicatedNotAnd() {
177
206
orderCriteria .select ( orderRoot );
178
207
Predicate p1 = builder .equal ( orderRoot .get ( "id" ), "order-1" );
179
208
Predicate p2 = builder .equal ( orderRoot .get ( "id" ), "order-2" );
180
- orderCriteria .where ( builder .not ( builder .and ( p1 , p2 ) ) );
209
+ Predicate compoundPredicate = builder .and ( p1 , p2 ).not ();
210
+ // a negated AND should become an OR
211
+ assertEquals ( Predicate .BooleanOperator .OR , compoundPredicate .getOperator () );
212
+ orderCriteria .where ( compoundPredicate );
181
213
182
214
List <Order > orders = em .createQuery ( orderCriteria ).getResultList ();
183
215
assertEquals ( 3 , orders .size () );
0 commit comments