在数据库中更新@Transient注释的字段

时间:2016-08-04 21:33:33

标签: java hibernate jpa spring-data

我有一个看起来像这样的实体:

@Entity
public class Candidate {

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

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

为了在将Candidate作为json对象返回时消除循环引用,我将Candidate设置为null JobApplication Candidate }}。但是,当我保留已更新的Candidate时,它会使用JobApplication null更新Candidate,从而终止关联。这是一个错误还是我做错了什么?我的印象是JPA提供者应该忽略使用Hibernate和Spring Data的@Transient.注释的字段。

1 个答案:

答案 0 :(得分:0)

  

我将Candidate设置为null JobApplication Candidate

问题是你可以自由地将mostRecentApplication的值更改为你想要的任何值,但是改变现有关系的属性可能会产生不利影响。

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

但如果您执行以下操作,则可以观察您所看到的内容

candidate.getMostRecentApplication().setSomeProperty( null );

在这种情况下,您不会更改mostRecentApplication,而是改变someProperty的{​​{1}}状态。如果mostRecentApplication不是分离和非托管实例,则在事务上下文中将更改该值。