Как выполнить операцию удаления в классах, состоящих из отношения один ко многим - PullRequest
0 голосов
/ 13 июля 2020
This is my product Entity
   
 @Entity
    public class Product {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        @NotNull
        private String name;
    
        private String cancellable;
        private String returnable;
        @NotNull
        private String brand;
        private boolean active;
        @JsonIgnore
        @OneToMany(mappedBy = "product",cascade = CascadeType.ALL)
        private Set<ProductVariation> productVariationSet;
    }

    
This is Product Variant Entity

    @Entity
    public class ProductVariation {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        private String ProductName;
    
        @NotNull
        private int quantityavailable;
        @NotNull
        private int price;
    
    
        private String details;
   
    
        @JsonIgnore
        @ManyToOne
        @JoinColumn(name = "product_id")
        private Product product;
    
     }
    
    
    

когда я пытаюсь удалить продукты по идентификатору, я получаю сообщение об ошибке, например

java. sql .SQLIntegrityConstraintViolationException: невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено ( mywebapp. product_variation, ОГРАНИЧЕНИЕ FKpryf02se86hpv5v7xn5afye4v ИНОСТРАННЫЙ КЛЮЧ (product_id) ССЫЛКИ product (id))

Как я могу исправить эту ошибку и удалить продукт, чтобы все его варианты также были удалить.

1 Ответ

0 голосов
/ 13 июля 2020

Каскадная операция в классе Product, как вы ее определили, автоматически удаляет варианты продукта. Просто удалите @JsonIgnore из поля 'private Set productVariationSet' и из поля 'private Product product'.

...