2012-03-25 2 views
18

스칼라 플레이를 사용하고 있습니다! Anorm을 사용하여 데이터 모델을 데이터베이스에 유지합니다. 내가 예제 코드 here 다음 :Anorm에 새 객체를 저장할 때 기본 키를 검색하는 방법

case class Bar(id: Pk[Long], name: String) 

object Bar { 

    val simple = { 
    get[Pk[Long]]("id") ~ 
    get[String]("name") map { 
     case id~name => Bar(id, name) 
    } 
    } 

    def findAll(): Seq[Bar] = { 
    DB.withConnection { implicit connection => 
     SQL("select * from bar").as(Bar.simple *) 
    } 
    } 

    def create(bar: Bar): Unit = { 
    DB.withConnection { implicit connection => 
     SQL("insert into bar(name) values ({name})").on(
     'name -> bar.name 
    ).executeUpdate() 
    } 
    } 

} 

그것을 확장하는 노력을, 나는 기본 키 방금 만든을 검색하고 경우 클래스에 저장하고 싶습니다.

어떻게 기본 키를 검색 할 수 있습니까?

답변

35

executeUpdate 대신 executeInsert 메서드를 사용하십시오. 참고 here, foremer 메서드는 Option[T]을 반환합니다. 여기서 T은 기본 키 유형입니다.

당신은 match 문으로 값을 추출 할 수 있습니다 :

DB.withConnection { implicit connection => 
     SQL(...).executeInsert() 
    } match { 
     case Some(long) => long // The Primary Key 
     case None  => ... 
    } 
+2

한 나는 기본 키는 자동 증가 키 인 경우에만 적용이 오늘 – opyate

+3

을 시도했다. 그렇지 않다면 결과는 None이 될 것입니다. –

+0

또한, ID가 삽입되어 있지 않으면 INSERT IGNORE에 대해 작동하지 않습니다. –

관련 문제