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
我正在尝试在 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