2013-01-15 9 views
11

Come posso dire a Slick di creare un tipo SQL decimale che consenta decimali?
Sembra che per impostazione predefinita Slick non consenta decimali che ho notato con il codice sottostante. Crea una colonna con il tipo di dati decimal(10,0) in MySQL.Scala Slick/ScalaQuery BigDecimal crea decimali (10,0) come consentire i decimali?

ho il seguente modello nel mio codice 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 _) 
} 

Durante l'avvio ho creare questa tabella utilizzando Slick a meno che non esista già con questo codice

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

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

risposta

10

Non è l'ideale, ma si potrebbe provare questo:

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

MySQL accetta solo DECIMAL, nel qual caso crea il campo con le sue impostazioni predefinite che corrisponde a DECIMAL(10, 0). Non sono sicuro se ci sia un altro modo per dire a Slick/ScalaQuery che vuoi certe opzioni per i tuoi campi.

+0

Ottimo, ha funzionato magnificamente grazie. – Farmor

+1

Sembra che con Slick 3+ si debba usare 'O.SqlType' invece di' O.DBType'. – michaJlS

Problemi correlati