2016-08-04 6 views
0

Ich habe eine Entität, die etwa wie folgt aussieht:Feld kommentierten mit @Transient in der Datenbank aktualisiert

@Entity 
public class Candidate { 

... 
    @Transient 
    private JobApplication mostRecentApplication 
... 
} 

@Entity 
public class JobApplication{ 
... 
    @ManyToOne 
    private Candidate candidate; 
... 
} 

Um einen zirkulären Verweis zu beseitigen, wenn die Candidate als JSON-Objekt zurückkehrt, stelle ich die Candidate zu null auf der JobApplication enthalten in der Candidate. Wenn ich jedoch eine Candidate persistiert, die auf diese Weise aktualisiert wurde, aktualisiert sie die JobApplication mit einer nullCandidate, die Verknüpfung zu töten. Ist das ein Fehler oder mache ich etwas falsch? Ich hatte den Eindruck, dass JPA-Anbieter Felder ignorieren sollten, die mit @Transient. gekennzeichnet sind. Ich verwende Hibernate mit Spring Data.

+1

Wenn Sie den Kandidaten im transaktionalen Kontext auf null setzen, werden die Änderungen an die Datenbank übergeben –

Antwort

0

stelle ich die Candidate zu null auf dem JobApplication innerhalb Candidate enthalten.

Die Sache ist, Sie sind frei, den Wert von mostRecentApplication zu ändern, was Sie wollen, aber die Eigenschaften dieser bestehenden Beziehung ändert dies negative Folgen haben.

// change value to null 
candidate.setMostRecentApplication(null); 
// change value to a detached instance 
candidate.setMostRecentApplication(new JobApplication(...)); 

Aber wenn man die folgenden tun, können Sie beobachten, was Sie

candidate.getMostRecentApplication().setSomeProperty(null); 

In diesem Fall sehen, ich bin nicht mostRecentApplication ändern, sondern stattdessen sind Sie den Zustand der someProperty der mostRecentApplication verändern . Wenn mostRecentApplication keine getrennte und nicht verwaltete Instanz ist, wird der Wert innerhalb eines Transaktionskontexts geändert.

Verwandte Themen