我有一个基类实体,如下所示:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "IDTYPE",
discriminatorType = DiscriminatorType.STRING,
length = 12)
public class ProtoObject implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String idtype;
// more columns
我有很多这样的子类,我建立并坚持。但是我发现即使 idtype 列设置为我在数据库中所期望的(使用单独的数据库浏览器工具检查),Java对象 idtype 不为EntityManager在其缓存中拥有的那些对象设置属性。
如果我通过EntityManager查找对象,则最近持久化的对象似乎具有 idtype 空白!如果我关闭应用程序并重新打开它,则数据显示正常。
这是使用EclipseLink 2.3.2.v20111125-r1046的JSF 2应用程序。
这是一个已知问题吗?任何人都可以提出解决方法吗?
答案 0 :(得分:2)
您可以在保留后更新缓存:
this.entityManager.persist(protoObject);
this.entityManager.flush();
this.entityManager.refresh(protoObject);
答案 1 :(得分:1)
创建对象时没有设置属性以反映您想要推送到数据库的内容。您需要设置字段以使其在缓存中保持一致,因为JPA实体被视为常规Java对象,并且不会为您修复问题。或者在持久化之后,您可以刷新更改,刷新对象以使用DB中的内容填充该字段