2016-08-04 23 views
0

更新我有一個看起來像這樣的實體:場與@Transient註釋數據庫

@Entity 
public class Candidate { 

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

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

爲了返回Candidate作爲JSON對象時,以消除循環引用,我設置了CandidatenullCandidate中包含的JobApplication。但是,如果我堅持已經更新的Candidate,它會使用nullCandidate更新JobApplication,從而終止關聯。這是一個錯誤還是我做錯了什麼?我的印象是,JPA提供商應該忽略用@Transient.註解的字段,我在Spring數據中使用了Hibernate。

+1

如果您在候選事務上下文中將候選者設置爲空,則會將更改提交到數據庫 –

回答

0

我設置Candidatenull對包含在CandidateJobApplication

事情是你可以自由地將mostRecentApplication的值更改爲任何你想要的值,但是改變現有關係的屬性可能會產生不利影響。

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

但是,如果你做到以下幾點,你可以看到你所看到的

candidate.getMostRecentApplication().setSomeProperty(null); 

在這種情況下,你不改變mostRecentApplication而是你改變mostRecentApplicationsomeProperty狀態。如果mostRecentApplication不是分離的和非託管的實例,那麼如果在事務性上下文中,該值將被更改。