sqlkotlinkotlin-exposed

Link tables in Exposed


I have these three tables in Exposed. How could I link them Train.number to Schedule .trNumber, Train.srCode to Stations.name, Train.destCode to Stations.name, Schedule .stnCode to Stations.name.

object Schedule: Table(){
    val trNumber = varchar("tr_number", length = 10)
    val stnCode = varchar("stn_code", length = 50)
    val type = integer("type")
    val arrTime = integer("arr_time")
    val depTime = integer("dep_time")
    val dayNum = integer("day_num")
    val km = varchar("km", length = 10)
    override val primaryKey: PrimaryKey = PrimaryKey(trNumber, stnCode)
}

object Train:Table(){
    val number= varchar("number", length = 10)
    val name= varchar("name", length = 50)
    val srCode= varchar("srCode", length = 10)
    val srcName= varchar("srcName", length = 50)
    val destCode= varchar("destCode", length = 10)
    val destName= varchar("destName", length = 50)
    val runDays= integer("runDays")
    val classes= integer("classes")
    val updatedOn= integer("updatedOn")
    override val primaryKey = PrimaryKey(number)

}
object Stations:Table(){
    val name= varchar("name", length = 50)
    val code= varchar("Code", length = 10)
    val lat =float("lat")
    val lng =float("lng")
    val jn= integer("jn")
    val updatedOn= integer("updatedOn")
    override val primaryKey = PrimaryKey(code)

}

Database persistence with Exposed


Solution

  • You can use references in exposed.

    object Schedule: Table(){
       ....
       val trNumber = varchar("tr_number", length = 10).references(Train.number)
       val stnCode = varchar("stn_code", length = 50).references(Stations.name)
       ....
    }
    
    object Train:Table(){
        ....
        val srCode= varchar("srCode", length = 10).references(Stations.name)
        val destCode= varchar("destCode", length = 10).references(Stations.name)
        ....
    }