在 Scala 中构建 model/entity 以与 Squeryl 映射的最佳方法是什么?
What is the best way to build a model/entity in Scala to map with Squeryl?
我对 Scala、Play Framework 和 Squeryl 还很陌生。我已经理解 val 和 var 的概念,但我很难尝试对我的实体进行建模。正如我在 Squeryl 文档中看到的,有时他们在 id 上使用 var,而其他时候使用 val。 id 和其他值的最佳方法是什么(有时他们使用 var/val 而其他时候使用选项,最后一个仅适用于实体上的可为空字段)?
示例 1
class Playlist(var id: Long,
var name: String,
var path: String) extends KeyedEntity[Long] {
}
示例 2
class Author(val id: Long,
val firstName: String,
val lastName: String,
val email: Option[String]) {
def this() = this(0,"","",Some(""))
}
为什么有时他们扩展 KeyedEntity[T] 而有时不扩展?
非常感谢您的帮助!
在 Squeryl 0.9.5 中,所有实体都需要扩展 KeyedEntity[T]
,但是对于 0.9.6,您可以隐式提供 KeyedEntityDef
。有关示例,请参阅 this。
Option[T]
在字段可以包含空值时使用。当该字段为空时,返回None
。
至于 val
与 var
它与 Scala 中的任何其他 class 完全一样。 var
允许重新分配,而 val
或多或少是只读的。如果您要更改值,很多人只需将该字段设置为 var
。或者,如果您使用案例 class,则可以使用 copy
创建一个具有更新值的新对象,或者您可以通过反射更新值。
我对 Scala、Play Framework 和 Squeryl 还很陌生。我已经理解 val 和 var 的概念,但我很难尝试对我的实体进行建模。正如我在 Squeryl 文档中看到的,有时他们在 id 上使用 var,而其他时候使用 val。 id 和其他值的最佳方法是什么(有时他们使用 var/val 而其他时候使用选项,最后一个仅适用于实体上的可为空字段)?
示例 1
class Playlist(var id: Long,
var name: String,
var path: String) extends KeyedEntity[Long] {
}
示例 2
class Author(val id: Long,
val firstName: String,
val lastName: String,
val email: Option[String]) {
def this() = this(0,"","",Some(""))
}
为什么有时他们扩展 KeyedEntity[T] 而有时不扩展?
非常感谢您的帮助!
在 Squeryl 0.9.5 中,所有实体都需要扩展 KeyedEntity[T]
,但是对于 0.9.6,您可以隐式提供 KeyedEntityDef
。有关示例,请参阅 this。
Option[T]
在字段可以包含空值时使用。当该字段为空时,返回None
。
至于 val
与 var
它与 Scala 中的任何其他 class 完全一样。 var
允许重新分配,而 val
或多或少是只读的。如果您要更改值,很多人只需将该字段设置为 var
。或者,如果您使用案例 class,则可以使用 copy
创建一个具有更新值的新对象,或者您可以通过反射更新值。