2010-02-20 21 views
1

我有兩個類之間的父子關係,但子對象從不存儲。我得到一個警告:如何使用來自Scala的JDO在GAE上存儲子對象

「org.datanucleus.store.appengine.MetaDataValidator checkForIllegalChildField:無法驗證關係net.vermaas.kivanotify.model.UserCriteria.internalCriteria」

但我不清楚爲什麼這個發生。已經嘗試了幾種替代品,但沒有運氣

父類是「UserCriteria」,它具有「Criteria」列表作爲子項。

的類定義如下(斯卡拉):爲什麼不存儲

class UserCriteria(tu: String, crit: Map[String, String]) extends LogHelper { 
    @PrimaryKey 
    @Persistent{val valueStrategy = IdGeneratorStrategy.IDENTITY} 
    var id = KeyFactory.createKey("UserCriteria", System.nanoTime) 

    @Persistent 
    var twitterUser = tu 

    @Persistent 
    var internalCriteria: java.util.List[Criteria] = flatten(crit) 

    def flatten(crits: Map[String, String]) : java.util.List[Criteria] = { 
    val list = new java.util.ArrayList[Criteria] 
    for (key <- crits.keySet) { 
     list.add(new Criteria(this, key, crits(key))) 
    } 
    list 
    } 

    def criteria: Map[String, String] = { 
    val crits = mutable.Map.empty[String, String] 

    for (i <- 0 to internalCriteria.size-1) { 
     crits(internalCriteria.get(i).name) = internalCriteria.get(i).value 
    } 

    Map.empty ++ crits 
    } 

    // Stripped the equals, canEquals, hashCode, toString code to keep the code snippet short... 
} 

@PersistenceCapable 
@EmbeddedOnly 
class Criteria(uc: UserCriteria, nm: String, vl: String) { 

    @Persistent 
    var userCriteria = uc 

    @Persistent 
    var name = nm 

    @Persistent 
    var value = vl 

    override def toString = { 
    "Criteria name: " + name + " value: " + value 
    } 
} 

任何想法的孩子的?或者爲什麼我收到錯誤信息?

感謝, 呂

回答

0

它看起來像你對我試圖實現一個owned one-to-many relationship。您似乎也忘記了UserCriteria的internalCriteria字段的@Embedded批註,儘管我認爲它可能仍然不起作用,因爲該字段包含列表而不是嵌入類本身。

相關問題