anorm的Pk的目的是什么?

lam*_*das 15 types scala anorm playframework-2.0

我正在使用Scala和Anorm编写Playframework 2.0应用程序来访问db.

目前我使用Pk[Long]id领域,我很担心额外的get访问实际值所需要的呼叫.所以我开始使用普通Longid字段,一切仍然完美.

什么Pk是,我应该使用它而不是普通类型?Pk与普通类型相比,它能给我带来额外的功能吗?

opy*_*ate 18

Pk 允许您指定键入的主键.

另外,假设你有这样一个人为的模型:

case class MyModel(id: Pk[Long], foo: String)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法构建模型实例:

MyModel(anorm.NotAssigned, "notKnownAtRuntime")
Run Code Online (Sandbox Code Playgroud)

...如果您的数据库负责生成密钥,或者:

MyModel(anorm.Id(123L), "knownAtRuntime")
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用`Option [Long]`然后用`None`或`Some(123L)`初始化你的对象? (4认同)
  • @mklemenz因为```case类MyModel(id:Pk [Long],id2:Pk [Long])```不应该编译```case class MyModel(id:Option [Long],id2:Option [Long] ])```编译 (2认同)