自定义单向连接关系JDO

时间:2017-05-22 10:21:50

标签: mapping jdo datanucleus

我试图使用Datanucleus API来配置两个表之间的M:N关系"它们彼此不了解"如下:

书籍:作者

@PersistenceCapable
public class Book{
    @Persistent(primaryKey = "true")
    @Column(name = "isbn", allowsNull = "false")
    private int userId;

    private String isbnCode;

    private Str5ing title;

    @Persistent(table="BOOK_AUTHOR")
    @Join(column="isbn")
    @Element(column="authorId")
    Collection<Author> bookAuthors = new HashSet<Author>();
}


@PersistenceCapable
public class Author{
    @Persistent(primaryKey = "true")
    @Column(name = "author_id", allowsNull = "false")
    private int authorId;

    private String firstName;

    private Str5ing lastName;

    @Persistent(table="BOOK_AUTHOR")
    @Join(column="authorId")
    @Element(column="isbn")
    Collection<Book> bookAuthors = new HashSet<Book>();
}

现在,根据JDO's mapping的这个链接,我希望将第三个表创建为连接表,并使用新的Id列。

我有两个问题:

  1. 上面的链接中提到的标识列未创建。
  2. 我想自定义第三个表以添加更多信息。我怎么做?比如说,如果我想添加发布日期或发布者名称,那么我需要控制BOOK_AUTHOR表。 (虽然我试图通过PersistanceAware注释完成此任务,但我不确定这是否可能,因为表级别的注释意味着我无法修改该表中的任何列,我只能查看信息。
  3. 我如何克服问题2?对于一两个版本,我可以使用问题1,但这也需要解决。

    JDO的Zens可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

要解决的问题。

  1. 您错过了valueForKey以关联2个关系字段;你需要添加它,所以它是双向的。如果这应该是2个独立的1-N关系,那么我就不知道如何共享连接表,因为从一侧插入的数据与来自另一方的数据不一致
  2. A&#34;加入表&#34;没有&#34;更多信息&#34;因为你的Java模型没有&#34;更多信息&#34;。 JDO(或JPA)只能映射您在Java中建模的内容。如果您需要额外的数据,那么首先需要将它放在Java模型中,这通常意味着添加一个包含它的中间可持久化类。请参阅他们的GitHUb中的this sample
  3. 不确定&#34;是什么意思?上面的链接中提到的标识列没有被创建。&#34; ;你的意思是&#34; ADPT_PK_IDX&#34;在链接?不要认为这适用于所有情况。

    对于M-N关系,我会提到this link而不是你的1-N