package Ġcom . we ed ow . spring . data . search . expression Ċ Ċ import Ġcom . we ed ow . spring . data . search . join . Entity Join s Ċ import Ġorg . springframework . data . jpa . domain . Specification Ċ Ċ /** Ċ Ġ* ĠLogical ĠExpression Ġrepresented Ġby Ġthe Ġlogical Ġoperators Ġ[ AND ][ Logical Operator . AND ] Ġand Ġ[ OR ][ Logical Operator . OR ] Ġthat Ġspecify Ġthe Ġrelationship Ġbetween Ġ[ expressions ]. Ċ Ġ*/ Ċ internal Ġdata Ġclass ĠLogical Expression ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogical Operator : ĠLogical Operator , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexpressions : ĠList < Expression > Ċ ) Ġ: ĠExpression Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġto Field Expressions ( neg ated : ĠBoolean ): ĠCollection < Field Expression > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexpressions . flatMap Ġ{ Ġit . to Field Expressions ( neg ated ). toList () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġto Specification ( entity Join s : ĠEntity Join s ): ĠSpecification < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Specification Ġ= ĠSpecification . where < T >( null ) !! ĊĠĠĠĠĠĠĠ Ġexpressions . forEach Ġ{ Ġexpression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspecification Ġ= Ġexpression . to Specification < T >( entity Join s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Specification Ġ= Ġif Ġ( logical Operator Ġ== ĠLogical Operator . OR ) Ġlast Specification . or ( specification ) !! Ġelse Ġlast Specification . and ( specification ) !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠSpecification . where ( last Specification ) !! ĊĠĠĠ Ġ} Ċ Ċ } Ċ