import org.jetbrains.exposed.dao.*import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
object Users :IntIdTable(){val name =varchar("name",50).index()val city =reference("city", Cities)val age =integer("age")}object Cities:IntIdTable(){val name =varchar("name",50)}classUser(id: EntityID<Int>):IntEntity(id){companionobject: IntEntityClass<User>(Users)var name by Users.name
var city by City referencedOn Users.city
var age by Users.age
}classCity(id: EntityID<Int>):IntEntity(id){companionobject: IntEntityClass<City>(Cities)var name by Cities.name
val users by User referrersOn Users.city
}funmain(){val connect = Database.connect("jdbc:oracle:thin:@127.0.0.1:1521:oracle",
driver ="oracle.jdbc.driver.OracleDriver",
user ="scott",
password ="oracle")
transaction {addLogger(StdOutSqlLogger)
SchemaUtils.create(Cities, Users)val stPete = City.new{
name ="St. Petersburg"}val munich = City.new{
name ="Munich"}
User.new{
name ="a"
city = stPete
age =5}
User.new{
name ="b"
city = stPete
age =27}
User.new{
name ="c"
city = munich
age =42}println("Cities: ${City.all().joinToString{it.name}}")println("Users in ${stPete.name}: ${stPete.users.joinToString{it.name}}")println("Adults: ${User.find{ Users.age greaterEq 18}.joinToString{it.name}}")}}