2012-06-23 22 views
15

我在寫使用Scala和Anorm訪問數據庫的Playframework 2.0應用程序。anorm的Pk的目的是什麼?

目前我使用Pk[Long]id字段,我擔心需要額外的get調用來訪問實際值。所以我開始使用Longid字段,並且所有東西仍然完美。

Pk是爲了什麼,我應該用它來代替普通類型嗎? Pk能否爲普通類型提供額外的功能/優點?

回答

18

Pk允許您指定一個鍵入的主鍵。

而且,說你有一個人爲的模式是這樣的:

case class MyModel(id: Pk[Long], foo: String) 

您與您的構建模型的實例的好處:

MyModel(anorm.NotAssigned, "notKnownAtRuntime") 

...如果你的數據庫負責以生成您的密鑰或以其他方式:

MyModel(anorm.Id(123L), "knownAtRuntime") 
+0

我知道'NotAssigned',它很方便,因爲id會自動生成一個LLY。我只是覺得還有別的東西。不管怎樣,謝謝你! – lambdas

+4

爲什麼不使用Option [Long],然後用'None'或'Some(123L)'初始化對象? – maklemenz

+2

@mklemenz因爲'''case case MyModel(id:Pk [Long],id2:Pk [Long])'''''''case case MyModel(id:Option [Long],id2:Option [長])'''編譯 –