在Scala中构建模型/实体以与Squeryl进行映射的最佳方法是什么?

时间:2015-01-20 19:43:37

标签: scala model playframework-2.0 entity 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] ,有时却不会?

我真的很感激一些帮助!

1 个答案:

答案 0 :(得分:1)

在Squeryl 0.9.5中,所有实体都需要扩展KeyedEntity[T]然而使用0.9.6,您可以隐式提供KeyedEntityDef。有关示例,请参阅this

当字段可以包含空值时,使用

Option[T]。当该字段为空时,将返回None

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