我第一次使用JDO(使用Datanucleus实现)进行新项目,并且我在使用JDO注释定义1-N单向拥有关系时遇到了麻烦。我需要的是在Subitems
中收集Item
,以便Subitem
没有对所有者的引用:
@PersistenceCapable(detachable = "true")
public class Item {
...
@Persistent(defaultFetchGroup = "true")
Collection<Subitem> subitems;
...
}
一切都很好,但是如何定义关系映射到哪个现有的RDBMS列?通过在子表中创建不可为空的表列,在数据库中实现AFAIK拥有的1-N,但我没有(并且不希望)父引用类Subitem
中的字段,然后我可以使用@Column(name="...")
注释进行修饰。
如何在JDO3中正确使用@ForeignKey
注释?注释接受FK约束的名称,但不接受相应的FK表和列规范。根据定义,FK是参考。基于公共密钥的两个表之间的约束,但我似乎无法指定另一个表和一个公共密钥(@ForeginKey at Datanucleus JDO docs)。
编辑:
应该使用@Element(column="...")
注释:
@PersistenceCapable(detachable = "true")
public class Item {
...
@Persistent(defaultFetchGroup = "true")
@Element(column="itemId")
Collection<Subitem> subitems;
...
}
正如答案中的文档链接中明确指出的那样。
答案 0 :(得分:1)
JDO(或JPA也就此而言)没有“拥有”关系,只有关系(这是我从未听说过与GAE的数据存储有关的术语,而你没有使用它)。
DataNucleus docs充分定义了所有这些关系恕我直言,所以只需浏览你所在的菜单,例如 http://www.datanucleus.org/products/accessplatform_3_1/jdo/orm/one_to_many_collection.html#fk_uni
http://www.datanucleus.org/products/accessplatform_3_1/jdo/orm/constraints.html#fk