Deleting entity in Spring JPA

这一生的挚爱 提交于 2020-12-13 03:10:20

问题


There are two entities with relation @ManyToOne and @OneToMany (Categories and Products). When I enabeling (cascade=CascadeType.ALL) one record in Products pulls for deleting one Category, and that is BAD. What must be do for this entities that result is only deleting occurs in one place(Table) without cascade(related) delete for another reference??? I am using Spring 5.1.5 (not Spring Boot) Thank you!

SPRING 5 / TOMCAT 9 / JACKSON-DATABIND / spring-data-jpa 2.1.5 / persistence-api 1.0.2 / Hibernate-core 5.4.1

@Entity public class Category {

@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 public class Product {

    @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); return new ResponseEntity<>(HttpStatus.OK); }

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

}

回答1:


SOLVED, I don't know why, but in crudRepository method deleteById(productId) worked only with CascadeType.ALL and you delete all(product and category records) in the request /categories/{catId}/products/{productId} and this bad. I am usung just delete(Product product) and this delete product. In the case of {id} just do request project by id and got it, next delete.



来源:https://stackoverflow.com/questions/55323401/deleting-entity-in-spring-jpa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!