有两个具有@ManyToOne和@OneToMany关系的实体(类别和产品)。当我启用(cascade = CascadeType.ALL)时,“产品”中的一条记录将拉出以删除一个类别,即BAD。该实体必须做什么,结果是仅删除发生在一个地方(表),而没有级联(相关)删除以供另一参考?我正在使用Spring 5.1.5(不是Spring Boot) 谢谢!
SPRING 5 / TOMCAT 9 / JACKSON-DATABIND / spring-data-jpa 2.1.5 / persistence-api 1.0.2 / Hibernate-core 5.4.1
@实体 公共类类别{
@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;
}
@实体 公共类产品{
@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) 公共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);
}
答案 0 :(得分:0)
解决了,我不知道为什么,但是在crudRepository方法中,deleteById(productId)仅与CascadeType.ALL一起使用,并且您删除了请求/ categories / {catId} / products / {productId中的所有(产品和类别记录) },这很糟糕。我只是删除(产品产品)和此删除产品。在{id}的情况下,只需通过id请求项目并获取它,然后删除即可。