Scala 如何在Lift记录的MongoCaseClassField中存储枚举?

Scala 如何在Lift记录的MongoCaseClassField中存储枚举?,scala,mongodb,lift,Scala,Mongodb,Lift,使用Lift Record,当我尝试检索下面的MongoDB条目时,调用MongoCaseField的.asHtml方法时,会引发NullPointerException object MyEnumeration extends Enumeration { val A, B, C = Value } case class MyCaseClass(en: MyEnumeration.Value) class MyRecord extends MongoRecord[MyRecord] w

使用Lift Record,当我尝试检索下面的MongoDB条目时,调用
MongoCaseField
.asHtml
方法时,会引发
NullPointerException

object MyEnumeration extends Enumeration {
  val A, B, C = Value
}

case class MyCaseClass(en: MyEnumeration.Value) 

class MyRecord extends MongoRecord[MyRecord] with MongoId[MyRecord] {
  def meta = MyRecord
  object fail extends MongoCaseClassField[MyRecord, MyCaseClass](this)
}

object MyRecord extends MyRecord with MongoMetaRecord[MyRecord]

但是,如果我使用
String
而不是
Enumeration
,这就可以了。有没有办法在case类字段中使用枚举,或者应该使用不同类型的字段

我很确定这只适用于本机类型,如String、Int、Float、Double、Boolean等,而不适用于枚举。我确信这是由于序列化造成的。

我确信这只适用于本机类型,如String、Int、Float、Double、Boolean等,而不适用于枚举。我确信这是由于序列化造成的。

在编写mongoDB时,scala枚举并不适合使用,我使用decorator方法作为解决方法

假设您拥有此枚举:

object EmployeeType extends Enumeration {
  type EmployeeType = Value
  val Manager, Worker = Value
}
这是mongodb的记录:

import EmployeeType._
case class Employee(
  id: ObjectId = new ObjectId
)
在mongoDB中,存储枚举的整数索引,而不是枚举本身:

case class Employee(
  id: ObjectId = new ObjectId,
  employeeTypeIndex: Integer = 0
){
  def employeeType = EmployeeType(employeeTypeIndex); /* getter */
  def employeeType_=(v : EmployeeType ) = { employeeTypeIndex= v.id} /* setter */
}

额外的方法为employee类型的枚举实现getter和setter。

在编写mongoDB时,scala枚举不适合使用,我使用decorator方法作为解决方法

假设您拥有此枚举:

object EmployeeType extends Enumeration {
  type EmployeeType = Value
  val Manager, Worker = Value
}
这是mongodb的记录:

import EmployeeType._
case class Employee(
  id: ObjectId = new ObjectId
)
在mongoDB中,存储枚举的整数索引,而不是枚举本身:

case class Employee(
  id: ObjectId = new ObjectId,
  employeeTypeIndex: Integer = 0
){
  def employeeType = EmployeeType(employeeTypeIndex); /* getter */
  def employeeType_=(v : EmployeeType ) = { employeeTypeIndex= v.id} /* setter */
}

额外的方法实现了员工类型枚举的getter和setter。

你说得对,在仔细研究之后没有成功,我决定使用
BsonRecord
作为容器,而不是
mongocassfield
。你能把它标记为“已接受”,这样它就会显示为“已回答”而不是“未回答”吗?:)谢谢(我喜欢保持干净)我不确定我是否明白你的意思,答案被接受了。查看您9月14日的个人资料,我给了您+15分:您是对的,在四处搜索但没有成功后,我决定使用
BsonRecord
作为容器,而不是
mongocassfield
。您能将其标记为“已接受”,以便它显示为“已回答”而不是未回答吗?:)谢谢(我喜欢保持干净)我不确定我是否明白你的意思,答案被接受了。查看您9月14日的个人资料,您从我处获得+15: