在类jooq中使用主键和引用方法有什么好处

时间:2018-08-27 14:38:37

标签: kotlin jooq

我开始学习。我有mssql服务器。我在服务器上创建了一些代表表的类。但是我不明白在表类中使用 getPrimaryKey getReferences 方法时有什么好处?

class User : TableImpl<Record>("users") {

    companion object {
        val USER = User()
    }

    val id: TableField<Record, Int> = createField("id", SQLDataType.INTEGER)
    val name: TableField<Record, String> = createField("name", SQLDataType.NVARCHAR(50))
    val countryId: TableField<Record, Short> = createField("country_id", SQLDataType.SMALLINT)

    override fun getPrimaryKey(): UniqueKey<Record> = Internal.createUniqueKey(this, id)

    override fun getReferences(): MutableList<ForeignKey<Record, *>> =
        mutableListOf(Internal.createForeignKey(primaryKey, COUNTRY, COUNTRY.id))

}

class Country : TableImpl<Record>("country") {

    companion object {
        val COUNTRY = Country()
    }

    val id: TableField<Record, Short> = createField("id", SQLDataType.SMALLINT)
    val name: TableField<Record, String> = createField("name", SQLDataType.NVARCHAR(100))

    override fun getPrimaryKey(): UniqueKey<Record> =
        Internal.createUniqueKey(this, id)

}

1 个答案:

答案 0 :(得分:1)

生成的元数据是有用的东西的组合...

  • 发送给API用户 you
  • jOOQ ,它可以反映该元数据的一些内部功能

例如,在getPrimaryKey()的情况下,该方法可以帮助完成与CRUD相关的各种操作,如您在手册中所见: https://www.jooq.org/doc/latest/manual/sql-execution/crud-with-updatablerecords/simple-crud

如果您不使用代码生成器(它将为您生成所有这些方法),则无需将它们添加到您的类中。您可以将它们缩短为:

class User : TableImpl<Record>("users") {
    companion object {
        val USER = User()
    }
    val id: Field<Int> = createField("id", SQLDataType.INTEGER)
    val name: Field<String> = createField("name", SQLDataType.NVARCHAR(50))
    val countryId: Field<Short> = createField("country_id", SQLDataType.SMALLINT)
}

但是,强烈建议您使用代码生成器来实现您可能无法获得的各种高级jOOQ功能。