问题 Scala Slick / ScalaQuery BigDecimal创建十进制(10,0)如何允许小数?


如何告诉Slick创建允许小数的十进制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
    ...

4660
2018-01-15 12:39


起源



答案:


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

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

MySQL只接受 DECIMAL,在这种情况下,它创建具有默认值的字段 碰巧是 DECIMAL(10, 0)。我不确定是否有任何其他方法可以告诉Slick / ScalaQuery您希望为您的字段选择某些选项。


10
2018-01-15 14:39



太棒了,非常感谢。 - Farmor
似乎Slick 3+应该使用 O.SqlType 代替 O.DBType。 - michaJlS


答案:


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

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

MySQL只接受 DECIMAL,在这种情况下,它创建具有默认值的字段 碰巧是 DECIMAL(10, 0)。我不确定是否有任何其他方法可以告诉Slick / ScalaQuery您希望为您的字段选择某些选项。


10
2018-01-15 14:39



太棒了,非常感谢。 - Farmor
似乎Slick 3+应该使用 O.SqlType 代替 O.DBType。 - michaJlS