Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA2一对多空联接表_Java_Jpa_Jakarta Ee_Jpa 2.0_Ejb 3.0 - Fatal编程技术网

Java JPA2一对多空联接表

Java JPA2一对多空联接表,java,jpa,jakarta-ee,jpa-2.0,ejb-3.0,Java,Jpa,Jakarta Ee,Jpa 2.0,Ejb 3.0,我试图在发布和作者之间创建一对多的关系,但是由于某种原因,当我持久化发布时,作者得到持久化,但是联接表是空的 Publication.java @Id @Column(name="PUBLICATIONID") private String id; @OneToMany(cascade = CascadeType.ALL, mappedBy = "authorspublication", fetch = FetchType.EAGER) private Collection<Author

我试图在发布和作者之间创建一对多的关系,但是由于某种原因,当我持久化发布时,作者得到持久化,但是联接表是空的

Publication.java

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

@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorspublication", fetch = FetchType.EAGER)
private Collection<Author> authors;
@Id
@Column(name = "AUTHORID")
private String authorid;

@ManyToOne(optional = false, targetEntity = Publication.class)
@JoinColumn(name = "authorspublication", referencedColumnName = "publicationid")
private Publication authorspublication;
//pub is created - non managed
//author is created - non managed

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

em.merge(pub);
DataParser.java

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

@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorspublication", fetch = FetchType.EAGER)
private Collection<Author> authors;
@Id
@Column(name = "AUTHORID")
private String authorid;

@ManyToOne(optional = false, targetEntity = Publication.class)
@JoinColumn(name = "authorspublication", referencedColumnName = "publicationid")
private Publication authorspublication;
//pub is created - non managed
//author is created - non managed

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

em.merge(pub);
我不知道自己的球队是否落后,或者是其他原因


任何洞察都将不胜感激。

您尚未将其定义为使用
@JoinTable
;它当前正在使用外键,因此没有插入到联接表中。您需要添加

@JoinTable

一对多字段(作者)。不要忘记删除
@JoinColumn
,因为这是用于FK关系的您没有将其定义为使用
@JoinTable
;它当前正在使用外键,因此没有插入到联接表中。您需要添加

@JoinTable

一对多字段(作者)。不要忘记删除
@JoinColumn
,因为这是用于FK关系的您正在使用
@JoinColumn
,这表示您正在使用authors表中的FK列将发布链接到其作者

如果要使用联接表,需要删除该表并使用
@JoinTable
注释。然而,在我看来,您的映射是错误的。从作家到出版物,这种关系肯定是一种单一的关系吗?就这一点而言,一个作者可以有许多出版物,而一个出版物可以有多个作者

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

public class Publication{

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

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

但是,您可能希望将Author中的Publication字段更改为出版物的集合,并将
@OnetoMany
替换为
@ManyToMany
您正在使用的
@JoinColumn
表示您正在使用authors表中的FK列将出版物链接到其作者

如果要使用联接表,需要删除该表并使用
@JoinTable
注释。然而,在我看来,您的映射是错误的。从作家到出版物,这种关系肯定是一种单一的关系吗?就这一点而言,一个作者可以有许多出版物,而一个出版物可以有多个作者

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

public class Publication{

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

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

但是,您可能希望将Author中的Publication字段更改为出版物的集合,并将
@OnetoMany
替换为
@ManyToMany

我添加了持久性代码。部署时的JPA日志不会抛出错误或警告。我会将详细程度设置为精细,然后再查看。日志中没有任何内容。首先对所有发布执行插入,然后对作者执行插入,但从未引用联接表。是否使用eclipse链接作为JPA提供程序?我添加了持久性代码。部署时的JPA日志不会抛出错误或警告。我会将详细程度设置为精细,然后再查看。日志中没有任何内容。首先对所有发布执行插入,然后对作者执行插入,但从未引用联接表。您是否使用eclipse link作为JPA提供程序?我从作者处删除了实体发布的引用,并执行了联接表,这一切都起到了作用。如何在Author中添加回发布引用并使其双向?双向是指当您指定“mappedBy”时,就像您所做的那样(但删除了JoinColumn)。我从Author中删除了实体发布的引用,并执行了连接表,这是有效的。如何在Author中添加出版物引用并使其具有双向性?双向性是指在指定“mappedBy”时,就像您所做的那样(但删除JoinColumn)