2012-11-13 7 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를 더 일관성있게 만들기 때문에 ID 정의의 일부로 ID를 선택 사항으로 정의하는 두 번째 선택을 선호합니다.

답변

5

연산자 첫 번째 필드에있는 .? 연산자를 사용하면 투영법을 정의하는 순간까지 선택 사항 인 필드의 선택을 연기 할 수 있습니다. 때때로 그것은 당신이 원하는 것이 아니지만, Option으로 PK를 정의하는 것은 아마도 PK가 NOT NULL 일 것으로 예상 할 수 있기 때문에 다소 재미있을 것입니다. 당신이에 관심이 아니에요 필드 걱정 그럼 당신은 Users.partial.insert(None, "Jacobus")을 할 수

def partial = id.? ~ fname 

을하지

:

당신은 예를 들어, * 외에 추가 예측에 .?를 사용할 수 있습니다.