JDO - 使用注释的1-N单向关系 - 列名?

时间:2012-10-02 09:30:53

标签: java jdo datanucleus

我第一次使用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;
    ...
}

正如答案中的文档链接中明确指出的那样。

1 个答案:

答案 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