我有一个带有巨大菜单的应用程序,其中包含可以包含其他子菜单的子菜单。
在该应用的某个地方,我可以修改菜单文本。
想象一个“管理员”菜单,其中有一个“参数”菜单,其中有“声音”,“图像”,“任何”菜单。
我可以管理“声音”并将其更新为“声音”,就是这样。
但是当我尝试更新一个菜单时,我的应用程序崩溃并显示错误:
2019-05-20 16:41:53.206错误10096 --- [XNIO-17 task-5] f.g.j.h.aop.logging.LoggingAspect:中的异常 fr.gouv.justice.habilitation.web.rest.MenuResource.updateMenu()与 原因='java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException:对象引用了 未保存的临时实例-在保存临时实例之前 冲洗:fr.gouv.justice.habilitation.domain.Menu.codePere-> fr.gouv.justice.habilitation.domain.Menu'和exception = 'org.hibernate.TransientPropertyValueException:对象引用了 未保存的临时实例-在保存临时实例之前 冲洗:fr.gouv.justice.habilitation.domain.Menu.codePere-> fr.gouv.justice.habilitation.domain.Menu;嵌套异常为 java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException:对象引用了 未保存的临时实例-在保存临时实例之前 冲洗:fr.gouv.justice.habilitation.domain.Menu.codePere-> fr.gouv.justice.habilitation.domain.Menu'
({codePere
是指向父菜单的manyToOne链接ID)
我尝试将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>
感谢您的帮助,
卡罗琳