現在、JPA2の公式最終仕様を検討中です。次のステートメントは仕様のどこかに含まれていますか?
エンティティマネージャは、単一の永続コンテキスト内で、特定のデータベース行に対して、オブジェクトインスタンスが1つだけ存在することを保証します。
仕様を明確に理解していないか、引用符で囲まれたステートメントが仕様の一部であることを証明する部分が見つかりません。
現在、JPA2の公式最終仕様を検討中です。次のステートメントは仕様のどこかに含まれていますか?
エンティティマネージャは、単一の永続コンテキスト内で、特定のデータベース行に対して、オブジェクトインスタンスが1つだけ存在することを保証します。
仕様を明確に理解していないか、引用符で囲まれたステートメントが仕様の一部であることを証明する部分が見つかりません。
いいえ、仕様はそのような保証を与えるものではありません。しかし、私の意見では、それは暗黙のうちに想定されています。
実際には、同じテーブルが2つの異なるエンティティにマップされることがあります。それらの1つは、読み取り専用エンティティとして扱われます。読み取り専用エンティティは、たとえばレポートの目的で使用でき、最適化には他のエンティティのフィールドのサブセットのみが含まれます。これは、たとえば次のように実行できます。
@Entity
public class EntityA {
@Id private Integer id;
@Lob
byte[] tooHeavyToLoadAlways;
}
@Entity
@Table(name="EntityA")
public class EntityALightWeight {
@Id private Integer id;
}
JPAの場合、これら2つのエンティティ間には接続がないため、最初の1つだけが変更され、2つ目のエンティティが更新されるように注意するのは、アプリケーションの責任です。EntityALightWeightはデータベースから更新できますが、同じトランザクションでEntityAに加えられた変更が含まれることはないため、このため、注意して使用する必要があります。