给出以下配置
@Entity
public class A{
…
private List<Key<B>>bees;
…
}
@Entity
public class B{
…
}
如何将B保留为A属于bees
的集合?我必须坚持两次吗?当我使用JPA / JDO和Datanucleus时,我所做的只是
A aa = getA();
B bb = createB(…);
aa.getBees().add(bb);
aa.update();
但是对于Objectify,我必须坚持两次吗?在,我必须做
A aa = getA();
B bb = createB(…);
aa.getBees().add(bb.getKey());
ofy().save().entity(bb).now();
ofy().save().entity(aa).now();
答案 0 :(得分:2)
我不清楚你在问什么,但是持久化相关实体的最佳做法是使用分配器显式分配id。事实上,你最好永远不要使用“保存时设置null Long ID”。
因此,要保存A和B:
B b = new B(...); // Id set by ObjectifyFactory.allocateId()
A a = new A(...); // Id set by ObjectifyFactory.allocateId()
a.getBees().add(b.getKey());
ofy().save().entities(a, b);
我个人会将b
添加到A
的构造函数中。
答案 1 :(得分:0)
是的,您需要同时放置aa
和bb
(根据您的示例)。请记住,B
中的A
列表没有什么特别之处 - 它就像任何其他多值属性一样,但这些值是Key
而不是Long
s或String
s。
因此,当你坚持aa
时,Objectify就不会“跟随”这些键并坚持引用的实体。我会推迟 stickfigure ,但我想这是设计的,因为它可能会引入一些意外的写入,这可能会影响应用程序的成本和性能。