2016-08-04 82 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不是分离的和非托管的实例,那么如果在事务性上下文中,该值将被更改。