2011-08-18 58 views
1

使用提升記錄,當我嘗試檢索下面的MongoDB條目時,調用MongoCaseClassField.asHtml方法時引發NullPointerException如何在提升記錄中的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能正常工作。有什麼辦法在案例類字段中使用枚舉或應該使用不同類型的字段?

回答

2

我相當肯定這隻適用於像String,Int,Float,Double,Boolean等原生類型,但不能枚舉。我確信這是由於序列化。

+1

你說的沒錯,我決定使用'BsonRecord'作爲容器而不是'MongoCaseClassField'。 –

+0

您能否將其標記爲「已接受」,因此顯示爲「已回答」而不是未答覆? :)謝謝(我喜歡保持它乾淨) –

+0

不知道我跟着你,答案被接受。檢查您的個人資料9月14日,你從我+15:http://stackoverflow.com/users/319315/franz-bettag?tab=reputation –

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。