使用Lift Record,当我尝试检索下面的MongoDB条目时,在调用NullPointerException
.asHtml
方法时会引发MongoCaseClassField
。
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
,这样可以正常工作。有没有办法在案例类字段中使用枚举或应该使用不同类型的字段?
答案 0 :(得分:3)
在撰写本文时,mongoDB与scala枚举不一致,我使用装饰器方法作为解决方法。
说你有这个枚举:
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。
答案 1 :(得分:2)
我很确定这只适用于String,Int,Float,Double,Boolean等本机类型,但不适用于Enumerations。我确信这是因为序列化。