Удаление объекта в Spring JPA - PullRequest
0 голосов
/ 24 марта 2019

Есть две сущности с отношением @ManyToOne и @OneToMany (категории и продукты). Когда я включаю (cascade = CascadeType.ALL), одна запись в Продуктах тянет за удаление одной Категории, и это ПЛОХО. Что нужно сделать для этой сущности, в результате чего происходит только удаление в одном месте (таблица) без каскадного (связанного) удаления для другой ссылки ??? Я использую Spring 5.1.5 (не Spring Boot) Спасибо!

ВЕСНА 5 / TOMCAT 9 / JACKSON-DATABIND / spring-data-jpa 2.1.5 / persistence-api 1.0.2 / Hibernate-core 5.4.1

@ Entity публичный класс Категория {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CAT_ID")
private Long id;

@Column(name="CAT_NAME")
private String name;

@JsonManagedReference
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name="CAT_ID")
@OrderBy
private Set<Product> products = new HashSet<>();

public Long getId() {
    return id;
}

@ Entity Общественный класс Продукт {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="PRODUCT_ID")
    private Long id;

    @Column(name="PRODUCT_NAME")
    private String name;

    @JsonBackReference
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="CAT_ID")
    private Category category;

    public Long getId() {
        return id;
    }

@ RequestMapping (value = "/ Categories / {categoryId} / products / {productId}", method = RequestMethod.DELETE) public ResponseEntity deleteById (@PathVariable Long categoryId, @PathVariable Long productId) { productService.deleteProductById (ProductID); вернуть новый ResponseEntity <> (HttpStatus.OK); }

@Transactional
@Override
public void deleteProductById(Long productId) {
    // TODO Auto-generated method stub
    productRepository.deleteById(productId);

}

1 Ответ

0 голосов
/ 25 марта 2019

решено, я не знаю почему, но в методе crudRepository deleteById (productId) работал только с CascadeType.ALL, и вы удаляете все (записи о товарах и категориях) в запросе / категории / {catId} / products / {productId } и это плохо. Я использую только удалить (продукт продукта) и этот продукт удалить. В случае {id} просто сделайте запрос проекта по id и получите его, затем удалите.

...