加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 旧数据在OneToMany Mapping中被删除

发布时间:2020-12-15 02:20:09 所属栏目:Java 来源:网络整理
导读:产品和ProductLine.一个ProductLine可以有很多产品. Product.java:- @Entity @Table(name ="PRODUCT") public class Product { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; Product(String name){ this.name
产品和ProductLine.一个ProductLine可以有很多产品.

Product.java:-

@Entity
    @Table(name ="PRODUCT")
    public class Product {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        private String name;
    Product(String name){
            this.name=name;
        }
    }

ProductLine.java

public class ProductLine {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        @OneToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "PRODUCTLINE_PRODUCT",joinColumns = @JoinColumn(name = "PRODUCTLINE_ID"),inverseJoinColumns = @JoinColumn(name = "PRODUCT_ID"))
        private List<Product> products=new ArrayList<>();

     public ProductLine(String name){
        this.name=name;
        }
    }

ProductLineRepository.java

public interface ProductLineRepository extends JpaRepository<ProductLine,Integer> {
            ProductLine findOneById(String id);
        ProductLine findOneByName(String name);
        }

控制器: –

在控制器中,我正在以json形式解析用户与产品关联的产品列表,并将其持久保存到DB中.

public void addData(){
        List<Product> products=new ArrayList<>();
        Product product1=new Product("Iphone");
        Product product2=new Product("Mac");
        products.add(product1);
        products.add(product2);
        ProductLine productLine=productLineRepository.findOneByName("Apple");
        productLine.setProducts(products);
        productLineRepository.save(productLine);
    }

现在,如果产品线“Apple”已经存在,那么它将删除名为“Apple”的Product Line表中的条目,然后再次插入数据“IPhone”和“Mac”.但我不希望删除旧数据.我该怎么办?

解决方法

此行为称为orphanRemoval,当从关系中删除实体时(这是您在设置新产品列表时正在执行的操作),它将被删除.

从JPA 2.0开始,orphanRemoval的默认值为false,因此如果您使用此版本或更高版本,则此行为不应该存在,所以我猜您使用的是较低版本,要么使用更高版本,要么可以将orphanRemoval属性设置为false

@OneToMany(cascade = CascadeType.ALL,orphanRemoval="false")
@JoinTable(name = "PRODUCTLINE_PRODUCT",inverseJoinColumns = @JoinColumn(name = "PRODUCT_ID"))
private List<Product> products=new ArrayList<>();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读