Как сохранить сущность со многими отношениями к одному (без каскадирования) - PullRequest
0 голосов
/ 21 мая 2019

У меня есть приложение с огромным меню, содержащим подменю, которое может содержать другие подменю.

Где-то в этом приложении я могу изменить текст меню.

Представьте себе "Администратора"«Меню, в котором есть меню« Параметры », в котором есть меню« Звук »,« Изображение »,« Безотносительно ».

И я могу управлять и обновлять« Звук »до« Звуки »Вот и все.

Но когда я пытаюсь обновить одно Меню, мое приложение вылетает с ошибкой:

2019-05-20 16: 41: 53.206 ОШИБКА 10096 ---[XNIO-17 task-5] fgjhaop.logging.LoggingAspect: Исключение в fr.gouv.justice.habilitation.web.rest.MenuResource.updateMenu () с причиной = 'java.lang.IllegalStateException: org.hibernate.TransientPropertyValueExceptionссылается на несохраненный временный экземпляр - сохраните этот временный экземпляр перед сбросом:OBJEct ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом: fr.gouv.justice. реабилитации.domain.Menu.codePere -> fr.gouv.justice. реабилитации.domain.Menu;Вложенное исключение - java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом:habilitation.domain.Menu '

(codePere - идентификатор ссылки manyToOne для отца-меню)

Я пытался добавить cascade = CascadeType.ALL в свой ManyToOne, но он потерпел крах при попытке сохранитьМеню, которое я обновляю, и его родительское Меню (codePere), к которому я вообще не хочу прикасаться !!

Итак, вот мой вопрос: как я могу просто обновить желаемое Меню, не обновляяManyToOne меню, связанное с этим?

Вот мое menu.java:

@Entity
@Table(name = "menu")
public class Menu implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Size(max = 70)
    @Column(name = "libelle_menu", length = 70, nullable = false)
    private String libelleMenu;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "code_pere")
    private Menu codePere;
    [...]
}

Вот метод сохранения:

    @Override
    @Transactional
    public MenuDTO save(MenuDTO menuDTO) {
        log.debug("Request to save Menu : {}", menuDTO);
        Menu menu = menuMapper.toEntity(menuDTO);
        menu = menuRepository.save(menu);
        return menuMapper.toDto(menu);
    }

Вот репозиторий:

@Repository
public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificationExecutor<Menu>

Спасибо за помощь,

Кэролайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...