質問
私はこのようなエンティティモデルを有する(のEclipseLinkとJPA 2.0を使用して)
@Entity
class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
//equals, hashCode autogenerated by nb.
}
と
@Entity
class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@ManyToOne
A a;
//equals, hashCode autogenerated by nb.
}
IはB.aフィールドにnull参照を持っていないタイプAのすべてのオブジェクト、およびタイプBのすべてのオブジェクトを、クエリ。すべてのオブジェクトが管理されています。例えば、Collection<A> aObjects, Collection<B> bObjects
を取ることができます。
そのaObjects.get(0).equals(bObjects.get(0).a)
、およびa != null
を考えてみましょう。どのように私はそのaObjects.get(0) == bObjects.get(0).a
を確保することができますか?
同じオブジェクトを私は等しく/同じのオブジェクトを持っているが、私はむしろを好む
解決
JPAはそのように動作しません。あなたが戻ってJPAのAPIから取得するエンティティインスタンスは、永続データを表す「水和」コンテナです。 Javaは、彼らは単に一時データ保有している、自身が特別ではないオブジェクトます。
そのような観点からは、オブジェクトIDは、オブジェクトの平等は、重要ではありません。
アプリケーションがこの方法でオブジェクトIDを必要とする場合はJPAはちょうどその方向に曲がるように設計されていないため、、あなたは、負け戦いを戦うことになるだろう。
所属していません StackOverflow