Как создать отношение Map <Integer, Class> с JPA и Spring-Data-Jpa - PullRequest
0 голосов
/ 05 ноября 2018

Имея 2 сущности:

public class Store {

    @GeneratedValue
    @Id
    protected Long id;

    @LazyCollection(LazyCollectionOption.EXTRA)
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "STORE_ID")
    @Valid
    @MapKey(name = "id")
    protected Map<Long, Product> products = new HashMap<>();
}

и

public class Product {

    @Id
    protected Long id;
}

Идентификатор продукта НЕ генерируется автоматически, поэтому я должен получить его вручную.

Создание продукта и сохранение его работает нормально:

Product product = new Product();
product.setId(id); // id has been read from the sequence
productRepository.save(product);

Тем не менее, при создании магазина, если я делаю это:

Store store = new Store();
store.getProducts().put(product.getId(), product);
storeRepository.save(store);

Я получаю

EntityExistsException: A different object with the same identifier value was already associated with the session

Но если я это сделаю (сохраните магазин перед добавлением товара):

Store store = new Store();
storeRepository.save(store);
store.getProducts().put(product.getId(), product);
storeRepository.save(store);

это работает.

Может кто-нибудь объяснить, почему?

Спасибо.

...