package Ġcom . k ame o code . any dao . context ĊĊ Ċ import Ġcom . k ame o code . any dao . K Root Ċ import Ġcom . k ame o code . any dao . K Select Ċ import Ġcom . k ame o code . any dao . wrap s . Root Wrap Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Proxy Ċ import Ġjavax . persistence . EntityManager Ċ import Ġjavax . persistence . criteria . Criteria Builder Ċ import Ġjavax . persistence . criteria . Criteria Query Ċ import Ġjavax . persistence . criteria . Predicate Ċ import Ġjavax . persistence . criteria . Root ĊĊ Ċ private Ġval Ġproxy : ĠEntity Manager Ġ= ĊĠĠĠĠĠĠĠ ĠProxy . new Proxy Instance ( EntityManager :: class . java . getClassLoader (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < Class < *> >( EntityManager :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠInvocation Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny ?, Ġmethod : ĠMethod ?, Ġargs : ĠArray < out ĠAny >? ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġas ĠEntity Manager Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠPredicate Path Context < G >( override Ġvar Ġroot : ĠRoot < Any >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcriteria : ĠCriteria Query < G >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcb : ĠCriteria Builder ) ĊĠĠĠ Ġ: ĠPath Context < G >( proxy , Ġcriteria , Ġcb ) Ġ{ ĊĊĠĠĠ Ġfun Ġ< RESULT , ĠE > Ġto Predicate ( query : ĠK Root < E >. ( K Root < E >) Ġ-> ĠK Select < RESULT >): ĠPredicate Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Wrap Ġ= ĠRoot Wrap ( this , Ġroot ) ĊĠĠĠĠĠĠĠ Ġquery . invoke ( root Wrap Ġas ĠK Root < E >, Ġroot Wrap Ġas ĠK Root < E >) ĊĠĠĠĠĠĠĠ Ġval Ġpredicate Ġ= Ġget Predicate () ĊĠĠĠĠĠĠĠ Ġif Ġ( orders . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria . orderBy ( orders ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpredicate Ġ?: Ġcb . conj unction () ĊĠĠĠ Ġ} Ċ Ċ }