Помогите разобраться с мистическим поведением. Имеется сущность
@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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Изучаю JavaScriptХочу сделать, чтобы при клике на параграф текст в нём менял свой цвет на красный, а при повторном клике перекрашивался обратно...
Вот пример, где можно убрать get и ничего не измениться, так зачем он вообще нужен?