Итак, я задал этот вопрос вчера, но цели изменились, и вопрос другой:
Коллекция элементов Hibernate/JPA с отношением "многие ко многим"?
Я хочу знать, возможно ли создавать объекты, которые будут моделировать требуемые отношения, чтобы Hibernate создавал мою схему при запуске приложения.
Отношения, которые я хочу, выглядят так:
Дело в том, что таблица соединений может фактически содержать строки, которые не ссылаются ни на какие элементы. Структура представляет собой категоризацию элементов на основе пары «тип» и «значение» и вводится в систему вне данного конкретного приложения.
Что я хотел бы сделать, так это установить, что мой элемент Hibernate Entity содержит список категорий с помощью сопоставления, чтобы я мог фактически видеть, к каким категориям принадлежит мой элемент, И чтобы hibernate создавал таблицу для меня.
Вот что у меня получилось: отобразить это в моем классе Element Entity следующим образом:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
@JoinColumn(name = "type", referencedColumnName = "type"),
@JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
return categories;
}
Это делает большую часть того, что я хочу, он создает мои таблицы, как указано выше, именно так, как я хочу, чтобы они исключали одну вещь, в таблицу элементов добавлено уникальное ограничение для пары (тип, значение). Я не хочу этого, потому что несколько элементов могут иметь одинаковую пару типа и значения, мне нужно иметь возможность остановить создание уникального ограничения, но не могу понять, как с текущим сопоставлением, могу ли я это сделать? Я упускаю смысл отношения «многие ко многим»?