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

jpa2强制em刷新设置为insertable=false的字段,jpa,jpa-2.0,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; @Embedd

我使用的是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的字段的值?或者我能做些什么来修复它

多谢各位

另外,在my persistence.xml中提到这一点很重要,并放置以下行以禁用缓存

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

刷新操作完成后,您需要手动调用刷新

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

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

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

请注意以下事项:

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


感谢您的解释,具有默认值的字段是一个没有约束的字段,在何处或如何放置注释cascade=REFRESH???又来了!注释本身不起作用,您需要调用
entityManager.refresh(您的实体)
。级联注释仅适用于实体关系。您好,再次感谢您的回复,当我尝试在持久化后进行刷新时,实体显示“EntityNotFoundException:entity no reists”,我正在EJB中使用jpa,如何修复此问题?您好,我找到了答案!!!!我只需要做:em.persist(entityObj);em.flush();em.refresh(entityObj);对于更多的解释,大家可以咨询:,无论如何,uaiHebert感谢你是道路上的一盏灯,当然,你的网站和你的帖子是惊人的,一种乐趣!!!