2010-02-20 1 views
1

두 클래스 사이에 부모 - 자식 관계가 있지만 자식 개체가 저장되지 않습니다.Scala에서 JDO를 사용하여 GAE에 자식 개체를 저장하는 방법

"org.datanucleus.store.appengine.MetaDataValidator checkForIllegalChildField : 없음 관련 net.vermaas.kivanotify.model.UserCriteria.internalCriteria을 검증"나는 경고를받을 수 있나요

을하지만 그것은 나 이유에 불분명하다 발생합니다. 벌써 여러 가지 대안을 시도해 보았습니다.

상위 클래스는 "기준"목록이 하위 인 "UserCriteria"입니다. 차일이

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 
    } 
} 

어떤 아이디어를 저장하지 않는 이유 (스칼라)는 다음과 같이

클래스

정의된다? 또는 오류 메시지가 나타나는 이유는 무엇입니까? 당신이 owned one-to-many relationship을 구현하기 위해 노력하고있다처럼

덕분에, 게로

답변

0

그것은 나에게 보인다. 또한 UserCriteria의 internalCriteria 필드에 대해 @Embedded 주석을 잊어 버린 것 같지만 필드에 목록이 포함되어 있고 내장 클래스 자체가 포함되어 있지 않기 때문에 여전히 작동하지 않을 수도 있습니다.