У меня точно эта таблица (пропущенные поля не имеют значения):
ID | NAME | PARENT_ID
После добавления двух строк это выглядит точно:
ID | NAME | PARENT_ID
1 "ONE" null
2 "TWO" 1
А теперь, когда я удаляю вторую строкуПервый также удален.Я хотел бы каскадировать только от родителя к ребенку, поэтому, когда я удаляю строку с идентификатором 2, он должен удалить только эту одну строку.В случае, если я удаляю строку с ID 1, она должна удалить обе строки.Может ли кто-нибудь помочь мне в достижении этого?
Так выглядит моя сущность:
@Entity
@Getter
@DynamicUpdate
@EqualsAndHashCode(of = "name")
@NoArgsConstructor
@EntityListeners({AuditingEntityListener.class})
class Category {
@Id
@GeneratedValue(generator = "ID_GENERATOR")
private Long id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "category", cascade = CascadeType.ALL)
private Set<Product> products;
@Setter
@Accessors(chain = true)
@Column(unique = true, length = 20, nullable = false)
private String name;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "parent_category_id")
@Setter
@Accessors(chain = true)
private Category parentCategory;
@OneToMany(mappedBy = "parentCategory")
private Set<Category> subCategories = new HashSet<>();
@CreatedDate
@Column(updatable = false)
@Getter
private Instant creationDate;
@LastModifiedDate
@Getter
@Version
private Instant lastModifiedDate;
Category(String name, Category parentCategory){
this.name = name;
this.parentCategory = parentCategory;
}
}