jpa2强制em刷新设置为insertable = false的字段

时间:2014-10-29 17:36:07

标签: jpa jpa-2.0

我正在使用jpa 2.0并且我在数据库的表中有一个字段,默认情况下有值,我将该字段放在我的实体定义中,作为insertable = false,这样当插入时保留默认值,插入是正确完成但是当重新查询实体中该字段为空的对象时,它已被正确插入。

这是我的代码:

@Entity
@Table(name="SOME_TABLE")
public class SomeTable implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId
private SomeTablePK id;

@Column(name="X1")
private String x1;

**@Column(name="X2", insertable=false)**
private Date x2;

... more fields....

... setters and getters...
}

有没有办法强制实体管理器刷新我用作insertable = false的字段的值?或者我该怎么做才能解决它?

非常感谢你。

PS。值得一提的是,在我的persistence.xml中,放置以下行来禁用缓存。

<properties>
<property name="javax.persistence.sharedCache.mode" value="NONE"/>
</properties>

1 个答案:

答案 0 :(得分:4)

您需要在刷新操作后手动调用刷新。

规范( 3.2.4与数据库的同步)表示:

  

持久实体的状态在事务提交时与数据库同步。此同步涉及向数据库写入对持久实体及其关系的任何更新,如上所述。

     

对实体状态的更新既包括为持久属性或实体字段分配新值,也包括修改持久属性或字段的可变值[28]。

请注意以下事项:

  

与数据库的同步不涉及刷新任何托管实体,除非在这些实体上显式调用刷新操作或由于cascade = REFRESH或cascade = ALL注释元素的规范而级联到它们值。