2012-11-13 50 views
4

Slick DSL允許兩種方式在表格中創建可選字段。在Slick中描述可選字段

對於這種情況類:

case class User(id: Option[Long] = None, fname: String, lname: String) 

您可以通過以下方式之一創建一個表映射:

object Users extends Table[User]("USERS") { 
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc) 
    def fname = column[String]("FNAME") 
    def lname = column[String]("LNAME") 
    def * = id.? ~ fname ~ lname <> (User, User.unapply _) 
    } 

object Users extends Table[User]("USERS") { 
    def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc) 
    def fname = column[String]("FNAME") 
    def lname = column[String]("LNAME") 
    def * = id ~ fname ~ lname <> (User, User.unapply _) 
    } 
} 

有什麼之間的區別二?是老方式和其他新方式,或者他們服務於不同的目的?

我更喜歡第二種選擇,因爲它更一致,因此您將身份定義爲可選的id定義的一部分。

回答

5

.?.?第一個操作符允許您推遲在定義投影時選擇讓您的字段爲可選字段。有時候這不是你想要的,但是將你的PK定義爲Option也許有點有趣,因爲可以預計PK是NOT NULL

可以在追加的突起使用.?除了*,例如:

def partial = id.? ~ fname 

那麼你可以做Users.partial.insert(None, "Jacobus"),而不是擔心你不感興趣的領域