JPA2 一对多空连接 Table

JPA2 One-To-Many Empty Join Table

我正在尝试在 Publications 和 Authors 之间创建一对多关系,但是由于某种原因,当我保留 Publication 时,Authors 得到保留,但是 Join table 是空的。

Publication.java

@Id
@Column(name="PUBLICATIONID")
private String id;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorspublication", fetch = FetchType.EAGER)
private Collection<Author> authors;

Author.java

@Id
@Column(name = "AUTHORID")
private String authorid;

@ManyToOne(optional = false, targetEntity = Publication.class)
@JoinColumn(name = "authorspublication", referencedColumnName = "publicationid")
private Publication authorspublication;

DataParser.java

//pub is created - non managed
//author is created - non managed

author.setPublication(pub);
pub.getAuthors().add(author);

em.merge(pub);

我不知道拥有方是倒退的,还是其他的。

如有任何见解,我们将不胜感激。

您还没有定义它使用@JoinTable;它当前正在使用外键,因此为什么不插入连接 table。您需要添加

@JoinTable

到一对多字段 (authors)。不要忘记删除 @JoinColumn 因为那是 FK 关系

您正在使用 @JoinColumn,这表明您在作者 table 到 link 作者的出版物中使用 FK 列。

如果您想使用联接 table,您需要删除它并使用 @JoinTable 注释。但是在我看来,您的映射方式是错误的。从作者到出版物的关系肯定是 OneToMany 吗?就此而言,一个作者肯定可以有很多出版物,而一个出版物可以有多个作者吗?

对于发布的场景,它应该是这样的:

public class Publication{

    @Id
    @Column(name="PUBLICATIONID")
    private String id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "publications", fetch = FetchType.EAGER)
    private Collection<Author> authors;
}


public class Author{

    @Id
    @Column(name = "AUTHORID")
    private String id;

    @ManyToOne
    @JoinTable(name = "author_publications", joinColumn = @JoinColumn(name = "AUTHORID"), inverseJoinColumn = @JoinColumn(name = "PUBLICATIONID"))
    private Publication publications;
}

但是您可能想将作者中的出版物字段更改为出版物集合,并将 @OnetoMany 替换为 @ManyToMany