如何保存具有多对一关系的实体(无级联)

时间:2019-05-21 09:11:34

标签: hibernate spring-boot spring-data-jpa

我有一个带有巨大菜单的应用程序,其中包含可以包含其他子菜单的子菜单。

在该应用的某个地方,我可以修改菜单文本。

想象一个“管理员”菜单,其中有一个“参数”菜单,其中有“声音”,“图像”,“任何”菜单。

我可以管理“声音”并将其更新为“声音”,就是这样。

但是当我尝试更新一个菜单时,我的应用程序崩溃并显示错误:

  

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>

感谢您的帮助,

卡罗琳

0 个答案:

没有答案