Os mesmos objetos em JPA
-
18-09-2019 - |
Pergunta
Eu tenho modelo de entidade como este (usando EclipseLink e JPA 2.0):
@Entity
class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
//equals, hashCode autogenerated by nb.
}
E:
@Entity
class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@ManyToOne
A a;
//equals, hashCode autogenerated by nb.
}
Eu consultar todos os objetos do tipo A, e todos os objetos do tipo B, que têm não nulo de referência no campo B. De. Todos os objetos são gerenciados. Por exemplo, vamos dar Collection<A> aObjects, Collection<B> bObjects
.
Considere que aObjects.get(0).equals(bObjects.get(0).a)
e a != null
. Como posso garantir que aObjects.get(0) == bObjects.get(0).a
?
Eu tenho igual / idêntica objetos, mas eu preferiria preferem o mesmo objeto .
Solução
JPA não funciona dessa maneira. As instâncias de entidade que você recebe de volta do JPA API são recipientes "hidratados" que representam os dados persistentes. O java próprios objetos não são especiais, eles são detentores de dados apenas transitórios.
A partir dessa perspectiva, a identidade do objeto não é importante, a igualdade de objeto.
Se a sua aplicação requer a identidade do objeto dessa maneira, você vai estar lutando uma batalha perdida, uma vez que JPA simplesmente não é projetado para dobrar nesse sentido.