2016-05-16 11 views
0
@Entity 
public class Conference { 

    @ManyToOne 
    @JoinColumn(name = "host_id") 
    @JsonManagedReference 
    private User host; 

    @ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(name = "PARTICIPANT_CONFERENCE", 
      joinColumns = @JoinColumn(name = "CONFERENCE_ID_FRK"), 
      inverseJoinColumns = @JoinColumn(name = "PARTICIPANT_ID_FRK") 
    ) 
    @JsonManagedReference 
    private Set<User> participants; 
} 

@Entity 
public class User { 
    @ManyToMany(
      targetEntity = Conference.class, 
      fetch = FetchType.EAGER, 
      cascade = CascadeType.REMOVE, 
      mappedBy = "participants" 
    ) 
    @JsonBackReference 
    private Set<Conference> conferenceSet; 

    @OneToMany(
      targetEntity = Conference.class, 
      mappedBy = "host", 
      cascade = CascadeType.REMOVE, 
      fetch = FetchType.EAGER 
    ) 
    @JsonBackReference 
    private Set<Conference> conferenceHostSet; 
} 

JPAを使用していて、OneTOManyフィールドがJPAで更新されないという問題があります。私は会議にホストを追加した場合JPAで1対多フィールドが更新されない

が、ユーザーのホストセットは更新されませんでした。

だから、私はあまりにも、ユーザーのホストセットを更新しようとしました。

Set<Conference> conferences = form.getHost().getConferenceHostSet(); 
conferences.add(conference); 
userRepository.save(form.getHost().setConferenceSet(conferences)); 

ユーザーの参加者セットも更新されました。

は、どのように私はホストだけを更新することができますか?

+0

あなたはあまりにも() ''救う投稿することができますか?そして、あなたは 'カンファレンス'をどうやって作りますか? – ujulu

+0

@ujulu、確かに、それは両サイド、会議だけで動作します。会議を保存すると、会議のホストが更新されます。しかし、ユーザーのホストセットは更新されません。 – egaoneko

答えて

0

あなたは、あなたが望むすべてのアクションのためにそれを設定する必要があり、「削除」のためだけの仕事にカスケード接続設定されています。

+0

返信いただきありがとうございます。ユーザーのホストセットをREMOVEからALLに変更しようとしています。しかし、それはまだ動作しません。だから、私はすべての会議のホストを設定しようとするが、それは、 '' org.hibernate.PersistentObjectExceptionでエラーが発生:永続化するために渡されたデタッチエンティティ:com.pjwards.aide.domain.User''を。 – egaoneko

+0

このエラーはまったく別の問題です。 1つのセッションでオブジェクトを照会し、別のセッションでデータベースと対話する場所で使用しようとすると、分離エンティティ・エラーが発生します。私が以前に焼いたことのもう一つは、あなたが正しい注釈を使用していることを確認することです。エンティティマネージャを使用しているかどうかに応じて、JPAアノテーションまたはHibernateアノテーションを使用する必要がある場合としない場合があります。 – gwnp

関連する問題