You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<spanclass="o">.</span><spanclass="na">pets</span><spanclass="o">.</span><spanclass="na">any</span><spanclass="o">().</span><spanclass="na">name</span><spanclass="o">.</span><spanclass="na">contains</span><spanclass="o">(</span><spanclass="s">"fluffy"</span><spanclass="o">);</span><spanclass="c1">// person has a pet which sounds like fluffy</span>
161
161
</code></pre></div>
162
-
<p>You will notice that there are no <code>and</code> statements (conjunctions) that is because criteria uses
163
-
<ahref="https://en.wikipedia.org/wiki/Disjunctive_normal_form">Disjunctive Normal Form</a> (in short DNF) by default. Statements are
164
-
combined using logical <code>and</code> unless disjunction <code>or()</code> is explicitly used.</p>
165
-
166
-
<p>For more complex expressions, one can still combine criterias arbitrarily using <code>and</code>s / <code>or</code>s / <code>not</code>s.
167
-
Statement like <code>A and (B or C)</code> can be written as follows:</p>
<spanclass="o">.</span><spanclass="na">fullName</span><spanclass="o">.</span><spanclass="na">is</span><spanclass="o">(</span><spanclass="s">"John"</span><spanclass="o">).</span><spanclass="na">age</span><spanclass="o">.</span><spanclass="na">greaterThan</span><spanclass="o">(</span><spanclass="mi">21</span><spanclass="o">)</span><spanclass="c1">// fullName = 'John' AND age > 21</span>
174
+
<spanclass="o">.</span><spanclass="na">fullName</span><spanclass="o">.</span><spanclass="na">is</span><spanclass="o">(</span><spanclass="s">"John"</span><spanclass="o">).</span><spanclass="na">age</span><spanclass="o">.</span><spanclass="na">greaterThan</span><spanclass="o">(</span><spanclass="mi">21</span><spanclass="o">).</span><spanclass="na">nickName</span><spanclass="o">.</span><spanclass="na">isPresent</span><spanclass="o">()</span><spanclass="c1">// fullName = 'John' AND age > 21 AND nickName != null</span>
175
+
<spanclass="o">.</span><spanclass="na">fullName</span><spanclass="o">.</span><spanclass="na">is</span><spanclass="o">(</span><spanclass="s">"John"</span><spanclass="o">).</span><spanclass="na">or</span><spanclass="o">().</span><spanclass="na">fullName</span><spanclass="o">.</span><spanclass="na">is</span><spanclass="o">(</span><spanclass="s">"Mary"</span><spanclass="o">)</span><spanclass="c1">// fullName = 'John' OR fullName = 'Mary'</span>
<spanclass="o">.</span><spanclass="na">fullName</span><spanclass="o">.</span><spanclass="na">is</span><spanclass="o">(</span><spanclass="s">"Mary"</span><spanclass="o">)</span><spanclass="c1">// (fullName = 'John' AND age > 21) OR fullName = 'Mary'</span>
<spanclass="o">.</span><spanclass="na">fullName</span><spanclass="o">.</span><spanclass="na">is</span><spanclass="o">(</span><spanclass="s">"Mary"</span><spanclass="o">).</span><spanclass="na">age</span><spanclass="o">.</span><spanclass="na">greaterThan</span><spanclass="o">(</span><spanclass="mi">22</span><spanclass="o">)</span><spanclass="c1">// (fullName = 'John' AND age > 21) OR (fullName = 'Mary' AND age > 22)</span>
169
182
</code></pre></div>
170
-
<p>You need to add <code>@Criteria</code> to all classes to be queried. For example, to filter on <code>Person.pets.name</code>,
171
-
<code>Pet</code> class needs to have <code>@Criteria</code> annotation (otherwise generic ObjectMatcher is used).</p>
183
+
<h4>More complex logical expressions</h4>
172
184
185
+
<p>For more complex expressions, one can still combine criterias using <code>and</code>s / <code>or</code>s / <code>not</code>s. Boolean algebra methods
186
+
allow composition of existing criterias with each other using <code>and</code> / <code>or</code> / <code>not</code> logic.</p>
187
+
<divclass="highlight"><pre><codeclass="language-java" data-lang="java"><span></span><spanclass="c1">// fullName = 'John' AND (age > 22 OR nickName != null)</span>
0 commit comments