У меня есть приложение с огромным меню, содержащим подменю, которое может содержать другие подменю.
Где-то в этом приложении я могу изменить текст меню.
Представьте себе "Администратора"«Меню, в котором есть меню« Параметры », в котором есть меню« Звук »,« Изображение »,« Безотносительно ».
И я могу управлять и обновлять« Звук »до« Звуки »Вот и все.
Но когда я пытаюсь обновить одно Меню, мое приложение вылетает с ошибкой:
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>
Спасибо за помощь,
Кэролайн