【问题标题】:How to store child objects on GAE using JDO from Scala如何使用 Scala 的 JDO 在 GAE 上存储子对象
【发布时间】:2010-02-20 14:08:35
【问题描述】:

我有 2 个类之间的父子关系,但子对象从未存储。我确实收到了警告:

“org.datanucleus.store.appengine.MetaDataValidator checkForIllegalChildField:无法验证关系 net.vermaas.kivanotify.model.UserCriteria.internalCriteria”

但我不清楚为什么会发生这种情况。已经尝试了几种替代方案,但没有运气。

父类是“UserCriteria”,它有一个“Criteria”列表作为子类。

类定义如下(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
  }
}

任何想法为什么不存储孩子?或者为什么我会收到错误消息?

谢谢, 格罗

【问题讨论】:

    标签: scala google-app-engine jdo


    【解决方案1】:

    在我看来,您正在尝试实现 owned one-to-many relationship。此外,您似乎忘记了 UserCriteria 的 internalCriteria 字段的 @Embedded 注释,但我认为它可能仍然不起作用,因为该字段包含一个列表而不是嵌入类本身。

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2014-10-19
      • 2012-04-21
      • 2012-06-14
      • 1970-01-01
      相关资源
      最近更新 更多