package Ġcom . line corp . kotlin jd sl . test . entity . employee Ċ Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util .* Ċ import Ġjavax . persistence .* Ċ Ċ @ Inheritance ( strategy Ġ= ĠInherit ance Type . SINGLE _ TABLE ) Ċ @ Entity Ċ @ Table ( name Ġ= Ġ" employee ") Ċ @ Discriminator Column ( name Ġ= Ġ" EMP _ TYPE ") Ċ class ĠEmployee ( ĊĠĠĠ Ġ@ Id ĊĠĠĠ Ġ@ GeneratedValue ĊĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠ Ġval Ġname : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĠObjects . equals ( id , Ġ( other Ġas ? ĠEmployee )?. id ) ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= ĠObjects . hashCode ( id ) Ċ } Ċ Ċ @ Entity Ċ @ Table ( name Ġ= Ġ" full time _ employee ") Ċ @ Discriminator Value (" F ") Ċ class ĠFull Time Employee ( ĊĠĠĠ Ġval Ġannual Salary : ĠBigDecimal , ĊĠĠĠ Ġoverride Ġval Ġid : ĠLong , ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ċ ) Ġ: ĠEmployee ( id , Ġname ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĠObjects . equals ( id , Ġ( other Ġas ? ĠFull Time Employee )?. id ) ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= ĠObjects . hashCode ( id ) Ċ } Ċ Ċ @ Entity Ċ @ Table ( name Ġ= Ġ" part time _ employee ") Ċ @ Discriminator Value (" P ") Ċ class ĠPart Time Employee ( ĊĠĠĠ Ġval Ġweekly Salary : ĠBigDecimal , ĊĠĠĠ Ġoverride Ġval Ġid : ĠLong , ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ċ ) Ġ: ĠEmployee ( id , Ġname ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĠObjects . equals ( id , Ġ( other Ġas ? ĠPart Time Employee )?. id ) ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= ĠObjects . hashCode ( id ) Ċ } Ċ Ċ @ Entity Ċ @ Table ( name Ġ= Ġ" contract _ employee ") Ċ @ Discriminator Value (" C ") Ċ class ĠContract Employee ( ĊĠĠĠ Ġval Ġhourly Rate : ĠBigDecimal , ĊĠĠĠ Ġoverride Ġval Ġid : ĠLong , ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ċ ) Ġ: ĠEmployee ( id , Ġname ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĠObjects . equals ( id , Ġ( other Ġas ? ĠContract Employee )?. id ) ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= ĠObjects . hashCode ( id ) Ċ } Ċ Ċ @ Entity Ċ @ Table ( name Ġ= Ġ" project ") Ċ class ĠProject ( ĊĠĠĠ Ġ@ Id ĊĠĠĠ Ġ@ GeneratedValue ĊĠĠĠ Ġval Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġname : ĠString , ĊĊĠĠĠ Ġ@ OneToMany ( cascade Ġ= Ġ[ Cascade Type . ALL ]) ĊĠĠĠ Ġval Ġemployees : ĠList < Employee >, ĊĊĠĠĠ Ġ@ One ToOne ( cascade Ġ= Ġ[ Cascade Type . ALL ], Ġoptional Ġ= Ġfalse , Ġfetch Ġ= ĠFetch Type . LA ZY ) ĊĠĠĠ Ġval Ġsupervisor : ĠEmployee Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĠObjects . equals ( id , Ġ( other Ġas ? ĠProject )?. id ) ĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= ĠObjects . hashCode ( id ) Ċ } Ċ Ċ data Ġclass ĠEmployee Test Builder ( ĊĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" name " Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġbuild () Ġ= ĠEmployee ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname ĊĠĠĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠPart Time Employee Test Builder ( ĊĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" name ", ĊĠĠĠ Ġvar Ġweekly Salary : ĠBigDecimal Ġ= Ġ 1 0 0 . to BigDecimal () Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġbuild () Ġ= ĠPart Time Employee ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġweekly Salary Ġ= Ġweekly Salary ĊĠĠĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠFull Time Employee Test Builder ( ĊĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" name ", ĊĠĠĠ Ġvar Ġannual Salary : ĠBigDecimal Ġ= Ġ 1 0 0 0 0 . to BigDecimal () Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġbuild () Ġ= ĠFull Time Employee ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġannual Salary Ġ= Ġannual Salary ĊĠĠĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠContract Employee Test Builder ( ĊĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" name ", ĊĠĠĠ Ġvar Ġhourly Rate : ĠBigDecimal Ġ= Ġ 5 0 . to BigDecimal () Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġbuild () Ġ= ĠContract Employee ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġhourly Rate Ġ= Ġhourly Rate ĊĠĠĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠProject Test Builder ( ĊĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" name ", ĊĠĠĠ Ġvar Ġemployees : ĠList < Employee > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠFull Time Employee Test Builder (). build (), ĊĠĠĠĠĠĠĠ ĠPart Time Employee Test Builder (). build (), ĊĠĠĠĠĠĠĠ ĠContract Employee Test Builder (). build () ĊĠĠĠ Ġ), ĊĠĠĠ Ġvar Ġsupervisor : ĠEmployee Ġ= ĠEmployee Test Builder (). build () Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġbuild () Ġ= ĠProject ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġemployees Ġ= Ġemployees , ĊĠĠĠĠĠĠĠ Ġsupervisor Ġ= Ġsupervisor ĊĠĠĠ Ġ) Ċ } Ċ