Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象引用未保存的瞬态,即使使用CascadeType。全部_Java_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java 对象引用未保存的瞬态,即使使用CascadeType。全部

Java 对象引用未保存的瞬态,即使使用CascadeType。全部,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我知道关于这个主题有很多问题,但是我无法解决我的问题,甚至添加了CascadeType.ALL 我有两个名为UserMenu和MenuItem的表(有一对多关系) UserMenuDTO: @实体 @表(…) @EntityListeners(AuditableListener.class) 公共类UserMenuDTO实现可审核{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; @列(“…”) @不空白 私有字符串名称; @O

我知道关于这个主题有很多问题,但是我无法解决我的问题,甚至添加了
CascadeType.ALL

我有两个名为UserMenu和MenuItem的表(有一对多关系)

  • UserMenuDTO:
@实体
@表(…)
@EntityListeners(AuditableListener.class)
公共类UserMenuDTO实现可审核{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(“…”)
@不空白
私有字符串名称;
@OneToMany(mappedBy=“userMenuDTO”,cascade=CascadeType.ALL,orphanRemoving=true)
私有列表菜单=新建ArrayList();
@OneToOne(级联=级联类型.ALL)
@JoinColumn(“…”)
私人QrCodeDTO QrCodeDTO;
@许多酮
@JoinColumn(“…”)
私有用户到用户;
  • MenuItemDTO:
@实体
@表(“…”)
@EntityListeners(AuditableListener.class)
公共类MenuItemDTO实现可审核{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
// ...
@列(“…”)
@不空白
@尺寸(最大值=100)
私有字符串名称;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“…”)
私人菜单到菜单到菜单;
@许多酮
@JoinColumn(name=“…”)
私有UserMenuDTO UserMenuDTO;
  • 下面是我将menuitem添加到usermenu的代码:
public static void addMenuItemToUserMenu(UserMenuDTO UserMenuDTO,MenuItemDTO MenuItemDTO){
userMenuDTO.getmenumes().add(menuItemDTO);
menuItemDTO.setUserMenuDTO(userMenuDTO);
}
  • 当我将新菜单项插入用户菜单列表时,我遇到以下错误:(cascadeType.ALL无效
InvalidDataAccessApiUsageException:org.hibernate.TransientObject异常:
对象引用未保存的临时实例-
刷新前保存临时实例:…MenuItemDTO;
如果我在保存用户菜单之前保存菜单项,一切正常。我只想在一条语句中保存所有项

我如何解决这个问题

  • 更新(持久化操作的详细信息)
public void persist(){
UserMenuDTO UserMenuDTO=;//这是通过用户ID从数据库中获取的;
MenuItemDTO newMenuItemDTO=;//从请求正文创建
addMenuItemToUserMenu(userMenuDTO,newMenuItemDTO);
saveUserMenuDTO(userMenuDTO);
}
@服务
@交易的
公共类用户服务{
@凌驾
public void saveUserMenuDTO(UserMenuDTO UserMenuDTO){
userMenuRepository.save(userMenuDTO);
}
}
@存储库
公共接口UserMenuRepository扩展了JpaRepository{
}

如果看到您的
persist
方法,问题在于新的
menuItem
对象,因为它没有附加到持久性上下文(换句话说,它是暂时的)当您将此临时对象分配给从数据库获取的现有
userMenuDTO
实例时,从数据库获取的此实例附加到当前spring持久化上下文。因此,为了更新此已持久化对象的
菜单列表,您必须持久化新创建的
menuItem
首先,然后将这个持久化的
menuItem
添加到
菜单
列表中,最后保存
userMenuDTO

CascadeType。如果新创建了
userMenuDTO
menuItemDTO
实例,并且您是第一次将它们保存到数据库中,则所有
都可以工作。

请共享将userMenuDTO持久化到数据库中的完整代码。@Naqi,我添加了详细信息,请查看“更新”(持久化操作的详细信息)““如果userMenuDTO和menuItemDTO实例都是新创建的,那么CascadeType.ALL就可以工作了”这对我来说是新的,谢谢你的回答