在配置对象关系时候已经配置了一对多注解,如下所示:
@Entity
@Table(name = "T_PRODUCT")
@Data
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String productName;
private String productType;
private String productDesc;
private String productImgUrl;
private Boolean showInMainPage;
private Long sortNo;
@Temporal(TemporalType.DATE)
private Date onLineDate;
private boolean online;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<ProductCharactor> productCharactorSet = new ArrayList<ProductCharactor>();
}
在多的一方配置了cascade,如下所示:
@Entity
@Table(name = "T_PRODUCTCHARACTOR")
@Data
public class ProductCharactor {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String charactorDesc;
@ManyToOne(cascade = CascadeType.ALL, optional = false)
@JoinColumn(name="product_id", referencedColumnName="id")//
private Product product;
private boolean status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCharactorDesc() {
return charactorDesc;
}
public void setCharactorDesc(String charactorDesc) {
this.charactorDesc = charactorDesc;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
}
在controller中删除时代码如下所示:
@RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
public void delete(@PathVariable long id) {
System.out.println("productCharactor----delete---------------" + id);
ProductCharactor productCharactor = productCharactorRepository.findById(id);
productCharactor.setProduct(null);
productCharactorRepository.delete(productCharactor);
}
productCharactor.setProduct(null);//在没有加入这一句之前,删除了product,并且删除了所有与它关联的子对象,配置之后删除成功,只删除了当前选中的对象。