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 .

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top