Я сталкиваюсь с интересным решением LazyInitializationException. Чтобы предотвратить это (в OneToMany или ManyToMany), одним из известных решений является использование JOIN FETCH Query. Вы можете увидеть один из нескольких ее примеров: https://thoughts-on-java.org/best-practices-for-many-to-many-associations-with-hibernate-and-jpa/
Другим более простым решением является использование @Transactional из Spring. Например, вот так:
@DeleteMapping(value ="/product/{tagId}")
@ResponseBody
@Transactional
public String deleteProductWithoutRelation(@PathVariable String product, Model model) {
Optional<Product> pr = productService.selectProduct(product);
if (pr.isPresent()) {
tag.get().getCustomer().size(); //usualy throws LazyInitializationException,
//without JOIN-FETCH Statment or @Transactional
return deletedTagId;
}
Конечно, вы можете поместить @Transactional какого-либо метода из службы репозитория, чтобы инкапсулировать это решение. Итак, какие преимущества или недостатки обоих решений здесь?