我正在使用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>
答案 0 :(得分:4)
您需要在刷新操作后手动调用刷新。
规范( 3.2.4与数据库的同步)表示:
持久实体的状态在事务提交时与数据库同步。此同步涉及向数据库写入对持久实体及其关系的任何更新,如上所述。
对实体状态的更新既包括为持久属性或实体字段分配新值,也包括修改持久属性或字段的可变值[28]。
请注意以下事项:
与数据库的同步不涉及刷新任何托管实体,除非在这些实体上显式调用刷新操作或由于cascade = REFRESH或cascade = ALL注释元素的规范而级联到它们值。强>