2013-01-15 43 views
11

如何讓Slick創建一個允許小數的Decimal SQL類型?
看來,默認情況下,Slick不允許我使用下面的代碼注意到小數。它在MySQL中創建一個數據類型爲decimal(10,0)的列。Scala Slick/ScalaQuery BigDecimal創建小數(10,0)如何允許小數?

我在我的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 _) 
} 

在啓動過程中我用油滑創建該表,除非它已與此代碼

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

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

回答

10

這不是理想的存在,但你可以試試這個:

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

MySQL只接受DECIMAL,在這種情況下,它創建的字段默認爲 碰巧是DECIMAL(10, 0)。我不確定是否有任何其他方法可以告訴Slick/ScalaQuery您需要某些選項用於您的字段。

+0

太好了,非常感謝。 – Farmor

+1

似乎用Slick 3+應該使用'O.SqlType'而不是'O.DBType'。 – michaJlS