Это странный сценарий, связанный с тем, что я работаю с устаревшей системой, структуру которой я не могу изменить.Hibernate/JPA Коллекция элементов со многими для многих отношений?
Сценарий заключается в том, что у меня есть таблица Element, которая содержит различные данные об элементе с важными полями «type» и «value».
Различные комбинации типа и значения классифицируются. Например, все элементы типа 2 и значение «зеленый» относятся к категории 1.
Я создаю пользовательский интерфейс для устаревшей системы, которая позволяет пользователям определять эти категории с учетом типа и значения (очевидно) , Я хочу, чтобы унаследованная система включала набор категорий в свой спящий Entity. Категория на самом деле представляет собой перечисление типа ElementCategory, одна из моих задач заключается в том, что устаревшее приложение должно быть таким, чтобы определить мою схему, поэтому мне нужно собрать мои таблицы, когда я его запустил. и затем я использую эту базу данных , когда создаю свой новый интерфейс. Вот как я аннотированный свою новую коллекцию в моем Element Entity:
@CollectionOfElements(fetch=FetchType.EAGER,targetElement = ElementCategory.class)
@JoinTable(name = "Element_Category",joinColumns =
{@JoinColumn(name = "type", referencedColumnName="type"
@JoinColumn(name = "value", referencedColumnName="value")
})
@Column(name="category")
@Enumerated(EnumType.STRING)
public List<ElementCategory> getCategories() {
return categories;
}
Проблема заключается в том, что, когда я запустить сервер таблицы элементов, который создается имеет единственное ограничение на (тип, значение), что неверно , может быть несколько элементов с одинаковыми полями типа и значения, они просто относятся к тем же категориям категории ИЛИ, в зависимости от того, как выглядит таблица element_category.
Я знаю, что у меня есть множество для многих, но я не могу использовать многие для многих, если поле категории «Элементы» не содержит набор объектов категории, но это не просто набор перечислений ,
Возможно ли это с помощью спящего режима?
Исходя из этого вопросов, которые я попробовал другой подход и создал ElementCategory Entity:
@Entity
@Table(name="ElementCategory")
public class ElementCategory implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id =id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
int hash = 1;
hash = hash * (17 + id);
hash = hash * 31 + description.hashCode();
return hash;
}
/*
* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(!super.equals(obj)) {
return false;
}
if(getClass() != obj.getClass()) {
return false;
}
ElementCategory other = (ElementCategory)obj;
return ((other.id == id) && (this.description.equals(other.description)));
}
}
отображение этого в моем классе 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;
}
У меня есть попробовал поставить $ unique = false $ во всем магазине, но сгенерированные таблицы по-прежнему заканчиваются этим в моей таблице Element:
CONSTRAINT element_type_value_key UNIQUE (type , value)
Я не хочу, чтобы он был уникальным, несколько элементов могут иметь такую конфигурацию.
Так не начать в состоянии найти ответ на этот вопрос, я должен был сделать ElementCategory в к сущности и хранить свои данные в базе данных (это хорошо) I сделал связь с ManyToMany, а Hibernate все еще создает мою таблицу Element с уникальным ограничением пары типов и значений. Я не понимаю, как это соответствует «Многим многим», и я не могу понять, как отключить его. Пожалуйста помоги? – Link19
все еще делает uniqueconstint, если вы добавите свойство id в элемент ElementCategory? – bvanvelsen
Да, он уже имеет свойство id, аннотированное с помощью @id. Я не вижу, как это отношение много-много, если принято решение, что только одному элементу разрешено иметь эту конкретную пару? – Link19