2015-07-17 2 views
5

У меня есть три таблицы A, B и C и таблица A_B_C отображения, которое имеет внешние ключи для всех трех таблиц и некоторых других атрибутов (скажут X, Y). Теперь я хочу присоединиться к этой таблице в моем классе java.Как объединить три таблицы, используя одну таблицу в спящем режиме?

Отношения между этими таблицами - одни. Следовательно, я хочу, чтобы мои классы Java выглядели примерно так.

@Entity(name = "A") 
@Table(name = "A") 
public class A { 

     ??? Hibernate Annotation or query 
     Map<B,List<C>> BMapC; 
} 

@Entity(name = "B") 
@Table(name = "B") 
public class B { 
     ... 
} 

@Entity(name = "C") 
@Table(name = "C") 
public class C { 
     ... 
} 

Я хотел бы знать, можно ли использовать Hibernate Annotations для этого. Если нет, есть ли способ написать собственный запрос и заполнить переменную?

+0

Я считаю, что это закончится двойными данными? Можете ли вы уточнить больше –

+0

Да, это приведет к дублированию данных в модели данных. Однако это нормально для нашего случая использования. –

+0

Просто примечание: вам не нужно 'name = ...' для '@ Entity' или' @ Table'. –

ответ

8

К сожалению, hibernate не предоставляет никаких аннотаций из-за-коробки для таких сценариев. Этот сценарий может быть обработан только путем создания отображения класса в A_B_C:

@Entity 
@Table(name = "A_B_C") 
public class name = "A_B_C" { 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name = "FK_B", nullable = false) 
    private B b; 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name = "FK_C", nullable = false) 
    private C c; 

    //Getters, Setters, other attributes etc. 
} 

И есть список этого объекта в A:

@Entity 
@Table(name = "A") 
public class name = "A" { 

      @OneToMany(cascade=CascadeType.ALL) 
      @JoinColumn(name = "FK_A", nullable = false) 
      private Set<A_B_C> abc; 

      //Getters, Setters, other attributes etc. 
} 

И программно Преобразовать аЬс на карте B,C.

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