A collection with cascade=“all-delete-orphan” was no longer referenced by the owning entity instance

85
25 марта 2021, 11:50

Помогите разобраться с мистическим поведением. Имеется сущность

@Entity
@Data
@Table(name = "line")
public class Line extends BaseCrudEntity<Line, Long> { 
    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Property> properties; 
...
@Entity
@Data
@Table(name = "property")
public class Property extends BaseCrudEntity<Property, Long> {
...
@Repository("LineRepository") public interface LineRepository extends PagingAndSortingRepository<Line, Long> {
@Service public class LineCrudServiceImpl {  
@Autowired  LineRepository lineRepository;  
public Line save(Line entity) {
        return lineRepository.save(entity);  
} 

Когда я в контроллере получаю обновлённую Line с изменёнными Properties, или просто такую же, то получаю ошибку

 Error during managed flush [org.hibernate.HibernateExcep
tion: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: by.legan.web.manager_sorc.domain.data.monitoring.Line.proper
ties]

Вот так я получаю в контроллере обновлённую сущность Line, BaseCrudController является базовым, наследуюсь и не меняю функционал

public  abstract class BaseCrudController<T extends BaseCrudEntity, K extends Serializable>
@PostMapping
public T save(@Valid @RequestBody T entity) {
    return this.getService().save(entity);
}
....
@RestController
@RequestMapping(value = "/rest/line")
public class LineRestApiCrudController extends BaseCrudController<Line, Long> {
....

я разворачиваю war файл на сервере TomCat 9.0.0 и локально при разработке я делаю тоже самое, но эффект разный. Локально нет ни каких ошибок как бы я не менял структуру Line всё корректно, а на сервере в продакшене стабильно эта ошибке при сохранении сущности.

https://youtu.be/O_Cl-eZC4gc

Выгрузил вес проект в git/repo временный (удалил только пароли к базе) https://legan.by/gitea/VPKiTS/HibernateErrorTempGitRepo

Проблема вроди как решилась, еще буду тестировать дольше, после добавления в контроллере запроса сущности перед её сохранением.

@PostMapping
public T save(@Valid @RequestBody T entity) {
    if (Objects.nonNull(entity.getId())) get((K) entity.getId()); // Вот эта строка
    return this.getService().save(entity);
}

Не знаю почему, но работает только так ....... , может потому что коллекция fetch=FetchType.LAZY

READ ALSO
Анимация спрайтов

Анимация спрайтов

Не могу понять, как исправить мигание анимации((

96
Как менять цвет текста при клике?

Как менять цвет текста при клике?

Изучаю JavaScriptХочу сделать, чтобы при клике на параграф текст в нём менял свой цвет на красный, а при повторном клике перекрашивался обратно...

116
Зачем нужен get prop()?

Зачем нужен get prop()?

Вот пример, где можно убрать get и ничего не измениться, так зачем он вообще нужен?

112