2015-02-12 31 views
8

kullanarak 'None' ise varsayılan değerleri eklemek Sorunum basit.Sütun değeri

CREATE TABLE some_table 
(
    ... 
    seq_num DECIMAL(18,10) NOT NULL DEFAULT 1, 
    ... 
); 

Kullanıcı arayüzünden seqNum için bir değer girin veya olamaz:

ben şöyle CREATE TABLE açıklamada NOT NULL DEFAULT 1 olan bir sütun seqNum: Double var. Yani kabul PLAY formu gibidir: None olduğunda

case class SomeSection (
    ... 
    seqNum: Option[Double], 
    ... 
) 
class SomeSections(tag: Tag) extends Table[SomeSection](tag, "some_table") { 
    def * = (
     ... 
     seqNum.?, 
     ... 
    ) <> (SomeSection.tupled, SomeSection.unapply _) 

    ... 
    def seqNum = column[Double]("seq_num", O.NotNull, O.Default(1)) 
    ... 
} 
object SomeSections { 

    val someSections = TableQuery[SomeSections] 
    val autoInc = someSections returning someSections.map(_.sectionId) 

    def insert(s: someSection)(implicit session: Session) = { 
    autoInc.insert(s) 
    } 
} 

Ben arayüzünden seqNum yolluyorum, her şey var gayet çalışır ama:

case class SomeCaseClass(..., seqNum: Option[Double], ...) 
val secForm = Form(mapping(
    ... 
    "seqNum" -> optional(of[Double]), 
    ... 
)(SomeCaseClass.apply)(SomeCaseClass.unapply)) 

kaygan Tablo şema & Nesneler şuna benzer Bu, 'un NULL NULL sütununda doğru giremeyeceğini söyleyerek kırılır. This question nedenini açıklıyor.

Ancak bu sorunu slick kullanarak nasıl çözebilirim? None'u nerede kontrol etmem gerektiğini anlayamıyorum? nesnesini SomeSections Nesnesi insert yöntemine göndermek.

Önemliyse, sql-server kullanıyorum.

cevap

0

Bir .getOrElse(theDefault) ile son eklemeli tarafından Option Slick'le geçirilen zorlamak Ya veya DB (a None değerinden) NULL kabul eder ve varsayılan bunu biraz tetiği kullanarak yapmak.

+2

Eğer '.getOrElse (theDefault)' işlevini kullanacaksam, tablo oluştururken ayarlanan varsayılan değer hiçbir şey kullanamayacağından, hiçbir şey kullanamayacağım. –

+0

"Hiçbiri" nin geçmesi hiçbir şey geçmiyor. – cchantep

7

Varsayılanın kullanılması, NULL yerleştirmek yerine değeri hiç eklememeyi gerektirir. Bu, eklenecek özel bir projeksiyona ihtiyacınız olacağı anlamına gelir. Tüm diğer alanlar için varsayılan değerleri kullanacaktır. Scala'nın yerli tuple dönüşümleri ve vaka sınıfı dönüşümlerinin sınırlamaları bunu biraz zor duruma getirebilir. Slick's HLists, Shapeless, Scala Records veya Scala XR gibi şeyler yardımcı olabilir, ancak şu anda önemsiz veya çok deneysel değildir.

İlgili konular