0

我有两个实体,parent并且child,有一个OneToMany relationship. 父类有@Owned子类的注释。后面没有关系。(从孩子到父母)

@Entity
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Owned
    @OneToMany(fetch = FetchType.LAZY)
    private Set<Child> children;

    .........

}


@Entity
public class Child {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key id;

    public String value;

    .........

    public int hashCode() {
         ... based on this.value ...
    }

    public boolean equals(Object o) {
         ... based on this.value ...
   }

}

问题 1:此设置是否类似于以 Parent 为祖先的实体组?以下两个语句确实返回一个相等的 Key:

- child.getId().qv.getId().getParent()
- KeyFactory.createKey("Parent", parent.getId())

问题 2:下面的代码是否需要大约十秒的时间来执行?它运行大约 223 毫秒:

for(int i = 0; i < 10; i++) {
    em.getTransaction().begin();

    parent = em.find(Parent.class, parentId);

    child = new Child("value" + i);
    parent.addChild(child)

    em.merge(parent)

    em.getTransaction().commit();
}

我认为应该花费 10 秒的原因是因为 Google App Engine 文档中的这句话:

“但是,您可以写入同一实体组的速率限制为每秒 1 次写入该实体组。”

https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore

谢谢

4

2 回答 2

2

您是在本地开发服务器上运行还是在生产环境上运行?本地开发服务器并不能完全模仿生产的性能特征。

该限制被放置为指导方针。您可能会获得比突发更好的性能。但是,如果您尝试长时间的高写入,则会出现异常。

数据存储写入的性能限制不会减慢您的代码执行速度。当事务性写入失败时,它们会抛出异常。确保您有一些异常处理程序来检查是否发生这种情况。

于 2013-04-04T16:04:06.430 回答
0

Q1:父母确实看起来像祖先。

Q2:为什么需要 10 秒?我没有看到任何暗示必须是这种情况。所以我对此的回答是否定的。

于 2013-04-04T15:02:09.060 回答