【发布时间】:2010-09-23 19:03:31
【问题描述】:
假设一个 Owner 有一个 Watch(es) 集合。
我正在尝试创建手表并将新创建的手表添加到现有所有者的手表集合(数组列表)中。
我的方法如下:
public void add(String ownerName, String watchName) {
Owner o = new OwnerDAO().retrieve(ownerName); //retrieves owner object without fail
EntityManager em = EMF.get().createEntityManager();
EntityTransaction t = em.getTransaction();
Watch w = new Watch(watchName);
Owner owner = em.merge(o);
t.begin();
owner.getWatches().add(w);
t.commit();
em.close();
}
代码在本地GAE环境下运行没有问题,但是在在线GAE环境下出现如下问题:
org.datanucleus.store.mapped.scostore.FKListStore$1 fetchFields: Object "package.Owner@2b6fc7" has a collection "package.Owner.watches" yet element "package.Watch@dcc4e2" doesnt have the owner set. Managing the relation and setting the owner.
请问我该如何解决这个问题?谢谢!
实体:
所有者:
@id
private String name;
@OneToMany(mappedBy = "owner",
targetEntity = Watch.class, cascade = CascadeType.ALL)
private List<Watch> watches= new ArrayList<Watch>();
观看:
@id
private String name;
@ManyToOne()
private Owner owner;
非常感谢您!
最诚挚的问候,
杰森
【问题讨论】:
-
老实说,我不知道这个问题是否应该作为重复问题关闭,但事实是有很多(非常)类似的问题:stackoverflow.com/questions/2600021/…、stackoverflow.com/questions/2921314/… 等. 我想当您不知道自己在寻找什么时,很难找到它们。
-
谢谢,帕斯卡!你是对的;我所拥有的只是错误消息,我不知道从哪个方向寻找答案。我尝试根据错误消息寻找解决方案,但无济于事。
-
你在这里提出了一个很好的观点,我现在相信这个问题在谷歌搜索相同的“错误消息”时可能会有所帮助。
标签: google-app-engine jpa datanucleus