2010-03-09 3 views
1

У меня есть лица модели, как это (с использованием EclipseLink и JPA 2.0):те же объекты в JPA

@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. 
     } 

я запрашиваю все объекты типа А, а все объекты тип B, которые не имеют нулевой ссылки на поле Ba. Все объекты управляются. Например, давайте возьмем Collection<A> aObjects, Collection<B> bObjects.

Учитывайте, что aObjects.get(0).equals(bObjects.get(0).a) и a != null. Как я могу обеспечить, чтобы aObjects.get(0) == bObjects.get(0).a?

У меня есть равных/одинаковых объектов, но я предпочел бы тот же объект.

ответ

1

JPA не работает таким образом. Экземпляры объектов, возвращаемые из API JPA, представляют собой «гидратированные» контейнеры, представляющие постоянные данные. Сами объекты java не являются особенными, они просто временные держатели данных.

С этой точки зрения идентификация объекта не имеет значения, равенство объекта.

Если ваше приложение требует идентичности объекта таким образом, вы будете сражаться с проигравшей битвой, поскольку JPA просто не предназначена для сгибания в этом направлении.

Смежные вопросы