Scala 是否在Slick中获取列的默认值?

Scala 是否在Slick中获取列的默认值?,scala,default,slick,Scala,Default,Slick,有没有一个简单的方法可以做到这一点?我在源代码中四处摸索,试图找到一些可以做到这一点的代码。是的,有 给一张桌子 object Users extends Table[(Int, String)]("users") { def id = column[Int]("id") def name = column[String]("name") } 您可以获得id列的默认值,如下所示: val driver: BasicProfile = scala.slick.driver.H2

有没有一个简单的方法可以做到这一点?我在源代码中四处摸索,试图找到一些可以做到这一点的代码。是的,有

给一张桌子

 object Users extends Table[(Int, String)]("users") {
   def id = column[Int]("id")
   def name = column[String]("name")
 }
您可以获得id列的默认值,如下所示:

 val driver: BasicProfile = scala.slick.driver.H2Driver //use the one appropriate to you

 val defaultValue: Int = Users.id.typeMapper(driver).zero
引用文件:

  • :“TypeMapper对象表示可在数据库中用作列类型的Scala类型”
  • typeMapper(驱动程序)生成一个特定于所用驱动程序的类型映射程序
  • TypeMapperDelegate
    上的
    zero
    方法给出“类型的零值”

我还没有测试它是返回定义表时为列设置的默认值,还是仅返回特定于类型的常规零值,但不返回表。

Slick的表组件提供了其他列选项。这可以通过对象O访问

因此,要获得为列指定的默认值,可以执行以下操作:

def mycolumn = column[String](
       "MYCOLUMNNAME",
       O.DBType("VARCHAR"),
       O.Default("Let's eat icecream"))

可以按如下方式提取默认值:

import slick.jdbc.SQLServerProfile.api._
import slick.relational.RelationalProfile

def getDefaultValue(fieldName: String, table: Table[_]) = {
  table.create_*.toSeq.find(_.name == fieldName)
    .flatMap(_.options.collectFirst {
      case RelationalProfile.ColumnOption.Default(defaultValue) =>
        defaultValue }).orNull
}
这是设置默认值的方式,而不是获取默认值的方式。