Моих классов выглядят simiar на это: (Предложение класс)Hibernate сохраняющегося Набор @Embeddable объектов бросает исключение
@Entity
public class Offer {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@ElementCollection(fetch = FetchType.LAZY)
private Set<Product> products;
...other fields
}
и товары класс:
@Embeddable
public class Product {
private String name;
private String description;
private int amount;
}
Проблема при попытке сохраняться Предлагаем организацию и попытаться добавить два объекта Оферты Set:
Product product = new Product("ham", "description1", 1);
Product product = new Product("cheese", "description2", 1);
я получаю исключение:
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "offer_products_pkey"
Details: Key (offer_id, amount)=(1, 1) already exists.
Я понятия не имею, почему я не могу сохранить два встраиваемых объекта в Set, когда одно из них имеет то же значение поля «сумма»? Является ли это как идентификатор каким-то образом?
Возможно, мне не следует создавать список встраиваемых объектов, так как он не предназначен для использования таким образом? Если да, то что, если мне не нужна компания Product, но вы хотите сохранить ее в другом объекте (предложение)?
Заранее спасибо за помощь
Возможно, вы неправильно определили ключ в таблице продуктов. Исключение ясное – mariusz2108
У меня нет ключевой переменной в объекте Product. Если я использую List вместо Set, он работает нормально, но для Set его нет. Проблема, похоже, связана с особенностями интерфейса Set - она не может содержать дубликатов. Но почему поле «количество» рассматривается как дубликат? – azalut
Ошибка возникает из PostgreSQL. Он сообщает вам, что не так: вы определили, что выглядит как первичный ключ с именем offer_products_pkey для (offer_ид, количество). И вы пытаетесь вставить две строки с одним и тем же основным ключом. снимите это ограничение первичного ключа, если оно не должно существовать. –