package Ġnl . law ik . p oc . hibernate . util Ċ Ċ import Ġorg . hibernate . Session Ċ import Ġorg . hibernate . SessionFactory Ċ import Ġorg . hibernate . boot . Metadata Sources Ċ import Ġorg . hibernate . boot . registry . Standard Service Registry Builder Ċ import Ġorg . hibernate . query . Query Ċ import Ġjava . lang . Exception Ċ import Ġjavax . persistence . criteria .* Ċ import Ġkotlin . reflect . K Property 1 ĊĊ Ċ object ĠHibernate Util Ġ{ ĊĠĠĠ Ġval Ġsession Factory : ĠSession Factory Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstandard Registry Ġ= ĠStandard Service Registry Builder (). configure (). build () ĊĠĠĠĠĠĠĠ Ġval ĠmetaData Ġ= ĠMetadata Sources ( standard Registry ). metadata Builder . build () ĊĠĠĠĠĠĠĠ ĠmetaData . session Factory Builder . build () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠHelper Ġfor Ġcreating Ġa Ġsession Ġscope Ġand Ġprovides Ġit Ġto Ġthe Ġprovided Ġfunction Ġliteral . Ċ Ġ* ĠThe Ġsession Ġis Ġclosed Ġafter Ġthe Ġfunction Ġliteral Ġis Ġprocessed Ċ Ġ* Ġthe Ġresult Ġfrom Ġthe Ġfunction Ġliteral Ġis Ġreturned . Ċ Ġ* ĠStarts Ġand Ġcommits Ġa Ġtransaction Ġfor Ġthe Ġsession Ġscope Ġif Ġthe Ġhandler Ġis Ġprocessed Ġsuccessfully , Ġroll s back Ċ Ġ* Ġthe Ġtransaction Ġif Ġan Ġexception Ġoccurs . Ċ Ġ* Ċ Ġ* Ġ@ param Ġhandler Ġfunction Ġliteral Ġthat Ġmakes Ġuse Ġof Ġthe Ġsession , Ġyou Ġcan Ġaccess Ġthe Ġsession Ġusing Ġthe Ġ" it " Ġkeyword Ċ Ġ* Ġin Ġthe Ġfunction Ġliteral . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġthe Ġfunction Ġliteral Ċ Ġ*/ Ċ fun Ġ< T > Ġopen And Close Session ( handler : Ġ( Session ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġval Ġsession Ġ= ĠHibernate Util . session Factory . open Session () ĊĠĠĠ Ġsession . beginTransaction () ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Result Ġ= Ġhandler ( session ) ĊĠĠĠĠĠĠĠ Ġsession . transaction . commit () ĊĠĠĠĠĠĠĠ Ġhandler Result ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsession . transaction . rollback () ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( session . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . close () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ WARNING ]: Ġsession Ġclosed Ġby Ġhandler Ġfunction : Ġ${ handler :: class . java . enc lo sing Method }, Ġplease Ġconsider Ġomit ting Ġmanually Ġclosing Ġthe Ġsession Ġin Ġthe Ġhandler Ġas Ġit Ġwill Ġbe Ġclosed Ġautomatically Ġat Ġthe Ġend Ġof Ġthe Ġcall ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġextension Ġfunctions Ċ Ċ fun Ġ< T > ĠCriteria Query < T >. where ( predicates : ĠList < Predicate >): ĠCriteria Query < T > Ġ{ ĊĠĠĠ Ġreturn Ġthis . where (* predicates . to Typed Array ()) Ċ } Ċ Ċ fun Ġ< R > ĠPath <* >. get ( prop : ĠK Property 1 < *, ĠR ?> ): ĠPath < R > Ġ= Ġthis . get < R >( prop . name ) Ċ Ċ /** Ċ Ġ* ĠFunction Ġfor Ġcreating Ġa Ġ[ Query ] Ġbased Ġon Ġthe Ġprovided ĠType Ġparameters . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT Ġ[ Criteria Query ] Ġtype Ġ( result Ġtype ) Ċ Ġ* Ġ@ param ĠX Ġ[ Root ] Ġtype Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT , Ġre ified ĠX > ĠSession . createQuery ( ĊĠĠĠ Ġinit : ĠQuery Context < T , ĠX >. () Ġ-> ĠUnit Ċ ): ĠQuery < T > Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= Ġthis . criteria Builder ĊĠĠĠ Ġval Ġcriteria Query Ġ= Ġbuilder . createQuery ( T :: class . java ) ĊĠĠĠ Ġval Ġroot Ġ= Ġcriteria Query . from ( X :: class . java ) ĊĠĠĠ Ġval Ġcontext Ġ= ĠQuery Context < T , ĠX >( builder , Ġcriteria Query , Ġroot ) ĊĠĠĠ Ġcontext . init () ĊĠĠĠ Ġreturn Ġcreate Query ( criteria Query ) Ċ } Ċ Ċ /** Ċ Ġ* ĠHelper Ġfunction Ġfor Ġ[ createQuery ] Ġwhich Ġcreates Ġa Ġ[ Query ] Ċ Ġ* Ġused Ġwhen Ġboth Ġyour Ġ[ Criteria Query ] Ġand Ġ[ Root ] Ġare Ġof Ġthe Ġsame Ġtype Ċ Ġ* Ċ Ġ*@ param ĠT Ġ[ Criteria Query ] Ġand Ġ[ Root ] Ġtype Ċ Ġ*/ Ċ @ Jvm Name (" createQuery From Single Type ") Ċ inline Ġfun Ġ< re ified ĠT > ĠSession . createQuery ( ĊĠĠĠ Ġinit : ĠQuery Context < T , ĠT >. () Ġ-> ĠUnit Ċ ): ĠQuery < T > Ġ{ ĊĠĠĠ Ġreturn Ġthis . createQuery < T , ĠT >( init ) Ċ } ĊĊĊĊĊĊĊĊ ĊĊ