4

我有一个看起来像这样的基类实体:

@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列设置为我在数据库中所期望的(使用单独的 DB 浏览器工具检查),Java 对象的idtype 属性也不会为 EntityManager 在其缓存中的那些对象设置。

如果我通过 EntityManager 查找对象,则最近保存的对象的idtype似乎为空白!如果我关闭应用程序并重新打开它,数据显示正常。

这是一个使用 EclipseLink 2.3.2.v20111125-r1046 的 JSF 2 应用程序。

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

4

2 回答 2

2

您可以在持久化后更新缓存:

    this.entityManager.persist(protoObject);
    this.entityManager.flush();
    this.entityManager.refresh(protoObject);
于 2014-06-26T17:03:35.593 回答
1

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

于 2012-11-20T13:20:26.863 回答