Scala 如何在幻象dsl中建模枚举类型?
My case类包含如下所示的枚举参数:Scala 如何在幻象dsl中建模枚举类型?,scala,enums,cassandra-2.1,phantom-dsl,Scala,Enums,Cassandra 2.1,Phantom Dsl,My case类包含如下所示的枚举参数: case class User(role: UserRole.UserRole, name: String) object UserRole extends Enumeration { type UserRole = Value val ADMIN, USER = Value } 如何将此案例建模为中的 提供的任何代码示例都会很有帮助。您需要使用EnumColumn,这正是为此而创建的。如果要将枚举用作键,则还需要使用默认帮助器方法创建基元
case class User(role: UserRole.UserRole, name: String)
object UserRole extends Enumeration {
type UserRole = Value
val ADMIN, USER = Value
}
如何将此案例建模为中的
提供的任何代码示例都会很有帮助。您需要使用
EnumColumn
,这正是为此而创建的。如果要将枚举用作键,则还需要使用默认帮助器方法创建基元
您可以使用定义枚举的两种风格
object Records extends Enumeration {
type Records = Value
val TypeOne, TypeTwo, TypeThree = Value
}
object NamedRecords extends Enumeration {
type NamedRecords = Value
val One = Value("one")
val Two = Value("two")
}
object enum extends EnumColumn[Records.type](this, Records)
在您的情况下,这将是:
object role extends EnumColumn[UserRole.type](this, UserRole)
要将其用作索引,您需要:
implicit val userRolePrimitive = Primitive(UserRole)
更新自Phantom 2.0.0起+
object role extends EnumColumn[UserRole](this)
您不需要定义任何其他隐式,枚举现在本机支持作为索引。我知道,IntelliJ Idea在代码编译时在下面一行显示错误。objectrole扩展了EnumColumn(this,UserRole){override lazy val name=“role”}因此,它是有效的。如果github示例可以更新为使用phantom建模数据的所有可能场景,这将对我们所有人都非常有帮助。干得好,谢谢弗拉维安。回答得好!但是从这里得到了有效的例子-