2016-05-16 10 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; 
} 

Ich verwendete JPA und ein Problem, dass OneTOMany-Feld in JPA nicht aktualisiert wird.One to Many-Feld wird nicht in JPA aktualisiert

Wenn ich Host in der Konferenz hinzugefügt habe, aber der Host-Satz des Benutzers wurde nicht aktualisiert.

Also, ich habe versucht, Benutzer Host-Set auch zu aktualisieren.

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

Es funktioniert gut, aber Teilnehmer setzen Anwender ebenfalls aktualisiert.

Wie kann ich nur Host aktualisieren?

+0

Können Sie die 'save()' auch posten? Und wie erstellst du 'Conference'? – ujulu

+0

@ujulu, Sicher, es funktioniert nur jede Seite, Konferenz. Wenn ich Konferenz speichere, wird der Gastgeber der Konferenz aktualisiert. Aber der Host-Satz des Benutzers wird nicht aktualisiert. – egaoneko

Antwort

0

Sie haben die Kaskadierung so eingestellt, dass sie nur für "Entfernen" funktioniert. Sie müssen sie für alle gewünschten Aktionen einrichten.

+0

Vielen Dank zu antworten, ich versuche, Host-Set des Benutzers von REMOVE zu ALL zu ändern. Aber es funktioniert immer noch nicht. Also versuche ich den Konferenz-Host auf ALL zu setzen, aber es tritt ein Fehler auf, der '' org.hibernate.PersistentObjectException: losgelöste Entität an persist: com.pjwards.aide.domain.User'' übergeben wurde. – egaoneko

+0

Dieser Fehler ist ein ganz anderes Problem. Sie erhalten den Fehler "Abgelöste Entität", wenn Sie ein Objekt in einer Sitzung abfragen und dann in einer anderen Sitzung versuchen, es dort zu verwenden, wo es mit der Datenbank interagiert. Die andere Sache, die ich vorher verbrannt habe, ist sicherzustellen, dass Sie die richtigen Anmerkungen verwenden. Je nachdem, ob Sie den Entity Manager verwenden oder nicht, müssen Sie möglicherweise die JPA-Annotationen oder die Hibernate-Annotationen verwenden. – gwnp