Hibernate аннотации для N ---- N отношения со связанными данными в отношении - PullRequest
0 голосов
/ 20 декабря 2011

В упрощенной ситуации, подобной этой, с 3 классами:

class ClassONE{

   protected List<IntermediatedClass>;

   (... getters / setters)

}

class ClassTWO

 protected String someData;

 (... getters / setters / iniciate List etc...)

}

class IntermediatedClass{

 public ClassONE one; //Points to an object (row) of ClassONE
 public ClassTWO two; //Points to an object (row) of classTWO.
 public Double data; //Data that need being saved with this particular relation between obj1 and obj2.

}

Я знаю, что с Hibernate вы можете объявить однонаправленное отношение ManyToMany между class1 и class2. Class1 может иметь несколько объектов class2, а class2 может быть на некоторых объектах class1. Это просто [CLASS1] N ---- N [CLASS2].

Я хочу объявить [CLASS1] 1 --- N [INTERMEDIATECLASS] N --- 1 [CLASS2] типичную реализацию базы данных N-N. Промежуточный класс имеет очень важный атрибут: данные, тип Double. Я не могу найти способ объявить IntermediateClass своим собственным способом реализации этого N - N с этими данными в аннотациях Hibernate.

Любая помощь, пожалуйста? Просто с помощью этого простого примера я могу решить мою проблему. Я не попытался бы сделать это, чтобы поддерживать код в чистоте для вашего понимания.

1 Ответ

2 голосов
/ 21 декабря 2011

Вы можете создать полноценное двунаправленное сопоставление «многие ко многим» с промежуточным классом сопоставления с дополнительными свойствами так же, как при проектировании модели ER:

class A {
  private List<AB> ab;

  @OneToMany(mappedBy = "a")
  public List<AB> getAb() {...}
}

class B {
  private List<AB> ab;

  @OneToMany(mappedBy = "b")
  public List<AB> getAb() {...}
}

И класса сопоставления:

class AB {
  private A a;
  private B b;
  private double data;

  @ManyToOne
  @JoinColumn
  public A getA() {...}

  @ManyToOne
  @JoinColumn      
  public B getB() {...}

  @Column
  public double getData() {...}
}

Но так как двунаправленные ассоциации, подобные этой, могут стать довольно запутанными и сложными для поддержки в коде вашего приложения, я бы обошелся без двунаправленной ассоциации и просто определил бы две однонаправленные ассоциации многие-к-одному в классе AB.

...