#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;