Say i have a superclass called employee and subclasses pf it like guard, teller, etc.
I wired up something like this but i am assuming there is a better way.
my “super class” table
object Employees : IntIdTable() {
val nameFirst = varchar("nameFirst", 100)
val nameLast = varchar("nameLast", 100)
val email = varchar("email", 100)
val guard = reference("guard_id", id).nullable()
val teller = reference("teller_id", id).nullable()
val employeeType =enumerationByName("employee_type", 15, EmployeeType::class)
val dateCreated = datetime("dateCreated")
val dateUpdated = datetime("dateUpdated")
}
my “super class” entity
class Employee(id: EntityID<Int>) : IntEntity(id){
companion object : IntEntityClass<Employee>(Employees)
var nameFirst by Employees.nameFirst
var nameLast by Employees.nameLast
var email by Employees.email
var employeeType by Employees.employeeType
var guard by Employees.guard
var teller by Employees.teller
var dateCreated by Employees.dateCreated
var dateUpdated by Employees.dateUpdated
}
my “derived class” table
object Guards : IntIdTable() {
val fireArmsTrained = bool("fireArmsTrained")
val employee = reference("employee_id", Employees)
val dateCreated = datetime("dateCreated")
val dateUpdated = datetime("dateUpdated")
}
my “derived class” entity
class Guard(id: EntityID<Int>) : IntEntity(id){
companion object : IntEntityClass<Guard>(Guards)
var employee by Employee referencedOn Guards.employee
var fireArmsTrained by Guards.fireArmsTrained
var dateCreated by Guards.dateCreated
var dateUpdated by Guards.dateUpdated
}
and my insert looks like this (also need input on a better way to do this)
val emp = transaction {
Employee.new {
nameFirst = "Buddy"
nameLast = "Legge"
email = "buddy.legge@gmail.com"
employeeType = EmployeeType.GUARD
dateCreated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
dateUpdated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
}
}
val guard = transaction {
Guard.new {
fireArmsTrained = true
employee = emp
dateCreated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
dateUpdated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
}
}
transaction {
emp.guard = guard.id
}