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オブジェクトとして扱われ、問題を修正しないため、キャッシュ内で一貫性を保つためにフィールドを設定する必要があります。または、永続化した後、変更をフラッシュしてオブジェクトを更新し、DB にあるものをフィールドに入力することができます

于 2012-11-20T13:20:26.863 に答える