2017-04-26 17 views
0

パブリケーションと作成者の間に1対多の関係を作成しようとしていますが、パブリケーションを永続化する何らかの理由で作成者は永続化されますが、結合テーブルは空の。JPA2 1対多空の結合テーブル

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); 

私があれば知りません所有サイドは後ろ向きであるか、あるいはそれ以外のものである。

洞察力があれば幸いです。

+0

パーシステンスコードを追加しました。 JPAログ配布では、エラーや警告はスローされません。詳細レベルをFINEに設定して再度見ます。 – Setix

+0

ログには何もありません。すべてのパブリケーションに対して最初に挿入された後、作成者が実行されますが、結合表は参照されません – Setix

+0

JPAプロバイダとしてeclipse-linkを使用していますか? – grizzly

答えて

2

@JoinColumnは、authorsテーブルの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

0

@JoinTableを使用するように定義していません。現在、外部キーを使用しているため、なぜ結合テーブルに挿入する必要はありません。あなたは多くのフィールドに1(著者)に

@JoinTable 

を追加する必要があります。 @JoinColumnはFK関係のため削除することを忘れないでください

+0

Authorからエンティティパブリケーションの参照を削除し、ジョインテーブルを実行し、それが機能しました。著者の出版参考文献にどのように追加して双方向にするのですか? – Setix

+0

双方向は、あなたが持っていた(しかしJoinColumnを削除した)ように "mappedBy" –

関連する問題