11

如何告诉 Slick 创建一个允许小数的 Decimal SQL 类型?
似乎默认情况下,Slick 不允许使用我在下面的代码中注意到的小数。decimal(10,0)它在 MySQL 中创建具有数据类型的列。

我的 Scala 代码中有以下模型:

import scala.slick.driver.MySQLDriver.simple._

case class TimeType(id: Option[Int], name: String,
  employeeMultiplier: BigDecimal, employerMultiplier: BigDecimal)

object TimeTypes extends Table[TimeType]("timeType") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name")
  def employeeMultiplier = column[BigDecimal]("employeeMultiplier")
  def employerMultiplier = column[BigDecimal]("employerMultiplier")
  def * = id.? ~ name ~ employeeMultiplier ~ employerMultiplier <> (TimeType, TimeType.unapply _)
}

在启动期间,我使用 Slick 创建此表,除非它已经存在此代码

...
lazy val database = Database.forDataSource(DB.getDataSource())

database.withSession {
  if (MTable.getTables("timeType").list.isEmpty) {
    TimeTypes.ddl.create
    ...
4

1 回答 1

10

这并不理想,但你可以试试这个:

def employeeMultiplier = 
  column[BigDecimal]("employeeMultiplier", O.DBType("decimal(10, 4)"))

MySQL 只接受DECIMAL,在这种情况下,它使用它的默认值创建字段,恰好是DECIMAL(10, 0). 我不确定是否有任何其他方法可以告诉 Slick/ScalaQuery 您需要为您的字段提供某些选项。

于 2013-01-15T14:39:28.103 回答