Discriminator列未在新持久化实体中设置

时间:2012-11-20 05:03:54

标签: jpa-2.0 eclipselink

我有一个基类实体,如下所示:

@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应用程序。

这是一个已知问题吗?任何人都可以提出解决方法吗?

2 个答案:

答案 0 :(得分:2)

您可以在保留后更新缓存:

    this.entityManager.persist(protoObject);
    this.entityManager.flush();
    this.entityManager.refresh(protoObject);

答案 1 :(得分:1)

创建对象时没有设置属性以反映您想要推送到数据库的内容。您需要设置字段以使其在缓存中保持一致,因为JPA实体被视为常规Java对象,并且不会为您修复问题。或者在持久化之后,您可以刷新更改,刷新对象以使用DB中的内容填充该字段