在 Scala 中构建 model/entity 以与 Squeryl 映射的最佳方法是什么?

What is the best way to build a model/entity in Scala to map with Squeryl?

我对 Scala、Play Framework 和 Squeryl 还很陌生。我已经理解 valvar 的概念,但我很难尝试对我的实体进行建模。正如我在 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

至于 valvar 它与 Scala 中的任何其他 class 完全一样。 var 允许重新分配,而 val 或多或少是只读的。如果您要更改值,很多人只需将该字段设置为 var。或者,如果您使用案例 class,则可以使用 copy 创建一个具有更新值的新对象,或者您可以通过反射更新值。