Scala 如何在Lift记录的MongoCaseClassField中存储枚举?
使用Lift Record,当我尝试检索下面的MongoDB条目时,调用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
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: