【发布时间】:2012-08-07 10:41:03
【问题描述】:
我使用 JDO 3.0 语法定义了一个无主关系:
@Persistent
@Unowned
private Set<Role> roles;
我有几个应该分配给用户的预定义角色。我使用以下代码为用户添加/删除角色:
roles.add(roleEntity);
roles.remove(roleEntity);
问题是这样删除也会从数据存储中删除原始实体,但我只想删除引用。我知道我只能在父实体中存储可以解决问题的密钥,但是有更好的解决方案吗?使用这种“自然”的语法?
【问题讨论】:
-
AFAIK,无主关系从不依赖,所以这不应该发生。 OTOH,如果您的
Role被序列化 (@Persistent(serialized=true)) 或嵌入 (@Embedded),则可能会发生这种情况。 -
无主关系可以依赖或不依赖于标准级联删除设置...对于 GAE 或任何数据存储...显然任何问题的定义都不完整
-
这就是问题所在!就我而言,无主关系表现得像依赖关系。我不知道这怎么可能。唯一的例外是当我调用roles.clear() 时,引用被删除但原始对象保留在数据存储中。但是,当我使用循环遍历角色并为每个角色调用 roles.remove(role) 时,它也会从数据存储中删除原始实体。
-
“文档”是 JDO 规范,公开可用,推荐任何使用 JDO 的人阅读。我认为 DataNucleus 文档也很好地涵盖了这些内容。谷歌文档不是这样。如果你没有遵循这个,那么你应该在 GAE JDO 问题跟踪器中提出一个问题,向他们展示一个测试用例......但是那里的无主关系是新的,所以谁知道它是否完整
-
小更新:appengine 中确实出现了问题。我做了一些实验,对于拥有和不拥有的关系,depedent="false/true" 没有效果,无论我做什么,关系总是依赖的。唯一的例外是当我在集合上调用 .clear() 时。对于拥有的关系,它也会删除原始实体,对于非拥有的关系,它不会。
标签: java google-app-engine jdo