gpt4 book ai didi

java - JPA2 一对多空联接表

转载 作者:行者123 更新时间:2023-12-02 02:52:14 25 4
gpt4 key购买 nike

我试图在出版物和作者之间创建一对多关系,但是由于某种原因,当我保留出版物时,作者会被保留,但联接表为空。

发布.java

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

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

作者.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);

我不知道是球队落后了,还是别的原因。

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

最佳答案

您正在使用@JoinColumn,这表明您正在作者表中使用FK列将出版物链接到其作者。

如果您想使用连接表,则需要删除它并使用@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

关于java - JPA2 一对多空联接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43638337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com