/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . kt orm . k sp . api Ċ Ċ import Ġorg . kt orm . schema . Base Table Ċ import Ġjava . sql . ResultSet Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠGlobal Ġkt orm - k sp Ġconfiguration , Ġyou Ġcan Ġadd Ġthis Ġannotation Ġto Ġany Ġclass , Ġbut Ġonly Ġallow Ġthis Ċ Ġ* Ġannotation Ġto Ġbe Ġadded Ġonce . Ċ Ġ*/ Ċ @ Target ( Annotation Target . CLASS ) Ċ @ Retention ( Annotation Retention . SOURCE ) Ċ public Ġannotation Ġclass ĠK t orm K sp Config ( ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAllow Ġentity Ġcreation Ġusing Ġreflection Ġin Ġ[ Base Table . do Create Entity ] Ġ( this Ġproperty Ġonly Ġaffects Ġtables ĊĠĠĠĠ Ġ* Ġgenerated Ġby Ġclass Ġentity ) ĠBy Ġcreating Ġan Ġentity Ġclass Ġthrough Ġreflection , Ġthe Ġdefault Ġvalue Ġparameters Ġin ĊĠĠĠĠ Ġ* Ġthe Ġentity Ġconstruction Ġcan Ġtake Ġeffect . ĠWhen Ġan Ġentity Ġconstruction Ġparameter Ġhas Ġa Ġdefault Ġvalue , Ġand Ġthe ĊĠĠĠĠ Ġ* Ġquery Ġresult Ġ[ ResultSet ] Ġdoes Ġnot Ġhave Ġthe Ġparameter Ġvalue Ġor Ġthe Ġvalue Ġis Ġnull , ĠThe Ġentity Ġis Ġinstantiated ĊĠĠĠĠ Ġ* Ġwith Ġparameter Ġdefault Ġvalues . ĠThis Ġbehavior Ġhas Ġa Ġslight Ġperformance Ġpenalty Ġ( alth ough Ġit Ġcan Ġbe Ġignored ĊĠĠĠĠ Ġ* Ġin Ġmost Ġcases ), Ġsetting Ġthis Ġproperty Ġto Ġfalse Ġwill Ġnot Ġuse Ġreflection Ġto Ġcreate Ġentities , ĠThis Ġwill Ġresult ĊĠĠĠĠ Ġ* Ġin Ġnot Ġbeing Ġable Ġto Ġcreate Ġinstances Ġwith Ġdefault Ġvalue Ġparameters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġallow Reflection Create Class Entity : ĠBoolean Ġ= Ġtrue , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġglobal Ġenum Ġconverter , Ġthe Ġvalue Ġcan Ġonly Ġbe Ġthe Ġimplementation Ġtype Ġof ĠNothing :: class Ġor Ġsingleton ĊĠĠĠĠ Ġ* Ġ[ Enum Converter ], Ġthe Ġdefault Ġconversion Ġrules Ġcan Ġbe Ġviewed Ġin Ġ[ Converter ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġenum Converter : ĠK Class < out ĠEnum Converter > Ġ= ĠNothing :: class , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġglobal Ġsingle Ġtype Ġconverter , Ġthe Ġvalue Ġcan Ġonly Ġbe Ġthe Ġimplementation Ġtype Ġof ĠNothing :: class Ġor ĊĠĠĠĠ Ġ* Ġsingleton Ġ[ Single Type Converter ], Ġthe Ġdefault Ġconversion Ġrules Ġcan Ġbe Ġviewed Ġin Ġ[ Converter ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsingle Type Converters : ĠArray < K Class < out ĠSingle Type Converter <* >>> Ġ= Ġ[], ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGlobal Ġnaming Ġstrategy , Ġthe Ġvalue Ġcan Ġonly Ġbe ĠNothing :: class Ġor Ġthe Ġimplementation Ġtype Ġof Ġ[ Naming Strategy ] ĊĠĠĠĠ Ġ* Ġof Ġa Ġsingleton . ĠBy Ġdefault , Ġthe Ġtable Ġname Ġis Ġthe Ġentity Ġclass Ġname , Ġand Ġthe Ġcolumn Ġname Ġis Ġthe Ġentity ĊĠĠĠĠ Ġ* Ġclass Ġattribute Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġnaming Strategy : ĠK Class < out ĠN aming Strategy > Ġ= ĠNothing :: class , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġextension Ġcode Ġgenerate Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġextension : ĠExtension Generator Ġ= ĠExtension Generator () Ċ ) Ċ Ċ /** Ċ Ġ* ĠDefault Ġextension Ġbuild Ġconfiguration . Ċ Ġ*/ Ċ @ Retention ( Annotation Retention . SOURCE ) Ċ public Ġannotation Ġclass ĠExtension Generator ( ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerate ĠEntity Sequence ĠExtension ĠProperty . ĊĠĠĠĠ Ġ* Ġ``` kotlin ĊĠĠĠĠ Ġ* Ġval ĠDatabase . employees : ĠEntity Sequence < Employee , Employees > ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġget () Ġ= Ġthis . sequence Of ( Employees ) ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġenable Sequence Of : ĠBoolean Ġ= Ġtrue , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerate ĠEntity Sequence Ġadd ĠExtension ĠFunction . ĠGenerated Ġonly Ġfor Ġclass Ġentity . ĊĠĠĠĠ Ġ* Ġ``` kotlin ĊĠĠĠĠ Ġ* Ġfun ĠEntity Sequence < Employee , Employees >. add ( employee ) ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġenable Class Entity Sequence Add Fun : ĠBoolean Ġ= Ġtrue , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerate ĠEntity Sequence Ġupdate ĠExtension ĠFunction . ĠGenerated Ġonly Ġfor Ġclass Ġentity . ĊĠĠĠĠ Ġ* Ġ``` kotlin ĊĠĠĠĠ Ġ* Ġfun ĠEntity Sequence < Employee , Employees >. update ( employee ) ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġenable Class Entity Sequence Update Fun : ĠBoolean Ġ= Ġtrue Ċ ) Ċ