Начал изучать JPA, и при реализации примерного проекта возникли сложности. Имеются сущности Product и Supplier. Необходимо для каждого продукта иметь цену и остаток по каждому поставщику. Задача состоит в отображении двух свойств сущности Product в одну физическую таблицу, которую назовем SUPPLIER_PRODUCT. Структура таблицы видится такой:
PRODUCT_ID | SUPPLIER_ID | PRICE | QUANTITY
@ElementCollection
@CollectionTable(name = "SUPPLIER_PRODUCT")
@MapKeyColumn(name = "supplier_id")
@Column(name = "price")
private Map<Long, Long> prices = new HashMap<Long, Long>();
@ElementCollection
@CollectionTable(name = "SUPPLIER_PRODUCT")
@MapKeyColumn(name = "supplier_id")
@Column(name = "quantity")
private Map<Long, Integer> qtys = new HashMap<Long, Integer>();
product.getPrices().put(supplier.getId(), product_price);
product.getQtys().put(supplier.getId(), product_qty);
products.save(product); // products - это Spring JpaRepository
Caused by: org.h2.jdbc.JdbcSQLException: Нарушение уникального индекса или первичного ключа: "PRIMARY_KEY_CE ON PUBLIC.SUPPLIER_PRODUCT(PRODUCT_ID, SUPPLIER_ID) VALUES (1830, 2, 3)"
Unique index or primary key violation: "PRIMARY_KEY_CE ON PUBLIC.SUPPLIER_PRODUCT(PRODUCT_ID, SUPPLIER_ID) VALUES (1830, 2, 3)"; SQL statement:
insert into supplier_product (product_id, supplier_id, quantity) values (?, ?, ?) [23505-193]
Я понимаю, что можно обойтись одной картой, а два свойства вынести в отдельный Embedded класс, вероятно это решит проблему. Но не упускаю ли я способ, позволяющий избежать создания нового класса?