В настоящее время я пытаюсь создать простое веб-представление каталога и использую Spring и Hibernate для сохранения данных. Я хочу иметь Template
, который является Product
, и в этом шаблоне должно быть несколько Ingredients
, которые также Products
.
Это мои занятия:
Template.java
@Entity
public class Template extends Product implements Serializable {
@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.MERGE, CascadeType.PERSIST})
private List<Ingredient> ingredients = new ArrayList<>();
public Template(String name, Money price, ArrayList<Ingredient> ingredients) {
super(name, price);
this.ingredients.addAll(ingredients)
}
// Getters and setters...
}
Ingredient.java
@Entity
public class Ingredient extends Product implements Serializable {
public Ingredient(String name, Money price) {
super(name, price);
}
}
Product.java
Этот класс происходит из структуры торговой точки. Он обрабатывает сохранение name и price , но также обрабатывает такие вещи, как ID для Hibernate.
public void initialize ()
Этот метод предоставляет фиктивные данные для целей тестирования.
public void initialize() {
Ingredient cheese = new Ingredient("Cheese", Money.of(1, "EUR");
Ingredient bacon = new Ingredient("Bacon", Money.of(1, "EUR");
Ingredient tomato = new Ingredient("Tomato", Money.of(1, "EUR");
// add these ingredients into ArrayLists (3 Lists)
// list1: tomato, bacon
// list2: bacon, tomato, cheese
// list3: cheese, tomato
Template pizza1 = new Template("Pizza 1", Money.of(1, "EUR"), list1);
Template pizza2 = new Template("Pizza 2", Money.of(1, "EUR"), list2);
Template salad = new Template("Salad", Money.of(1, "EUR"), list3);
// saving these in a catalog
}
При запуске этого кода я всегда получаю сообщение об ошибке такого типа:
Unique index or primary key violation: "UK_TAGDVK3J2NBLU2MQMBL8HBJV9_INDEX_1 ON PUBLIC.PRODUCT_INGREDIENTS(INGREDIENTS_PRODUCT_ID) VALUES ('f6f05610-ca1f-40b6-b0a8-abaccbc0452b', 2)"; SQL statement:
insert into product_ingredients (template_product_id, ingredients_product_id) values (?, ?) [23505-197]
Я интерпретирую эту ошибку следующим образом: Hibernate пытается создать таблицу для связи шаблонов с ингредиентами, но ключи ингредиентов появляются несколько раз.
Когда я пытался добавить только один ингредиент в список (так, один литр только с сыром, другой с беконом, ...), он прекрасно работал.
Я не совсем знаю, как искать эту тему, и я попытался найти ее, но пока ничего не нашел. Какие изменения мне нужно сделать, чтобы этот код работал, чтобы один объект Ingredient мог появляться в нескольких шаблонах?