我是靠谱客的博主 朴素星星,最近开发中收集的这篇文章主要介绍spring data jpa级联更新update或删除(好文章!!),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: com.htsc.thfx.framework.entity.user.UserInfo.authorities; nested exception is org.hibernate.HibernateException: A collection with cascade

jpa 中 

 

package com.htsc.thfx.framework.entity.user;

import com.htsc.thfx.framework.entity.menu.Menu;
import com.htsc.thfx.framework.entity.port.ProductCompany;
import com.htsc.thfx.framework.entity.port.ProductCompanyTemporaryStorage;
import com.htsc.thfx.framework.enums.user.UserInfoAuthStatus;
import com.htsc.thfx.framework.enums.user.UserType;

import javax.persistence.*;
import java.io.Serializable;
import java.util.*;

/**
 * @author K0060021
 * @createtime 2018年7月16日
 * 用户基本信息
 */

@Entity
public class UserInfo implements Serializable {

    @Id
    @Column(length = 50)
    private String username;//用户名



    @OneToMany(mappedBy = "userInfo",cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @JoinColumn(name = "username", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
    private Set<UserAuthority> authorities = new HashSet<UserAuthority>();


}

不能只用新的set替换旧的set 需要这样安全删除

List<UserAuthority> save = userAuthorityDao.save(newList);
// jpa 替换关联关系
if (userInfo.getAuthorities() == null)
userInfo.setAuthorities(new HashSet<>());
……
userInfo.getAuthorities().clear();
userInfo.getAuthorities().addAll(save);

解决原理:

如果是 all-delete-orphan ,那个集合不能用setXXX(List) ,只能用 getXXX().add()

重点在这两步骤:

一、

@OneToMany(……orphanRemoval = true)

二、

修改前:
    userInfo.setAuthorities(save)
修改后:
    userInfo.getAuthorities().clear();
    userInfo.getAuthorities().addAll(save);

最后

以上就是朴素星星为你收集整理的spring data jpa级联更新update或删除(好文章!!)的全部内容,希望文章能够帮你解决spring data jpa级联更新update或删除(好文章!!)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部