我有两个实体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是祖先的实体组?以下两个语句确实返回一个相等的键:
- 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文档中的这句话:
https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore 中的“但是,您可以写入同一实体组的速率限制为每秒写入实体组1次。”
由于
答案 0 :(得分:2)
您是在本地开发服务器或生产中运行吗? 本地开发服务器不能完全模仿生产的性能特征。
该限制作为指导原则。你可能会获得比爆发更好的性能。但是,如果您尝试了相当长时间的高写操作,您将获得例外。
数据存储区写入的性能限制不会减慢代码执行速度。当事务写入失败时,它们将抛出异常。确保你有一些异常处理程序来检查是否会发生这种情况。
答案 1 :(得分:0)
Q1:父母确实看起来像是祖先。
Q2:为什么需要10秒钟?我认为没有什么可以暗示这必须是这种情况。所以我对此的回答是否定的。