Общая ассоциативная таблица для множества «многие ко многим»

#database #jpa #java-ee-8

Вопрос:

Как создать общую ассоциативную таблицу для множества «многие ко многим»? Почему это не работает?

 @ManyToMany
@JoinTable(name="CARS",
        joinColumns=
        @JoinColumn(name="RANGE_ID", referencedColumnName="ID"),
        inverseJoinColumns=
        @JoinColumn(name="MODEL_ID", referencedColumnName="ID")
)
private List<Models> models;

@ManyToMany
@JoinTable(name="CARS",
        joinColumns=
        @JoinColumn(name="RANGE_ID", referencedColumnName="ID"),
        inverseJoinColumns=
        @JoinColumn(name="TYPE_ID", referencedColumnName="ID")
)
private List<Types> types;
 

Я хочу иметь ассоциативную таблицу «АВТОМОБИЛИ»:

 range_id | model_id | type_id
 

Ответ №1:

Просто представьте, что произойдет, если вы добавите новый тип в список типов или новую модель в список моделей. Как будет выглядеть новая строка? Модель и тип не будут принадлежать друг другу — то, что они должны в соответствии с вашим определением таблицы.

То, что вы ищете, — это Embeddable :

 @Embeddable
public class ModelAndType {
  @ManyToOne
  private Model model;

  @ManyToOne
  private Type type;
}
 

Это можно использовать в вашей модели:

 @Embedded
@ElementCollection
private List<ModelAndType> modelAndTypes;