Имея 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);
это работает.
Может кто-нибудь объяснить, почему?
Спасибо.