1

2 つのクラス間に親子関係がありますが、子オブジェクトが格納されることはありません。警告が表示されます:

「org.datanucleus.store.appengine.MetaDataValidator checkForIllegalChildField: 関係 net.vermaas.kivanotify.model.UserCriteria.internalCriteria を検証できません」

しかし、なぜこれが起こるのかは私には不明です。運がなければ、すでにいくつかの代替案を試しました。

親クラスは、「Criteria」のリストを子として持つ「UserCriteria」です。

クラスは次のように定義されます (Scala):

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

チャイルドが保存されない理由はありますか? または、エラー メッセージが表示されるのはなぜですか?

ありがとう、ゲロ

4

1 に答える 1

0

所有された一対多の関係を実装しようとしているように見えます。また、UserCriteria の internalCriteria フィールドの @Embedded アノテーションを忘れているようですが、フィールドには埋め込みクラス自体ではなくリストが含まれているため、まだ機能しない可能性があると思います。

于 2010-02-27T20:41:09.677 に答える