Hibernate Self Join - предотвратить удаление на каскаде от ребенка - PullRequest
0 голосов
/ 03 июня 2018

У меня точно эта таблица (пропущенные поля не имеют значения):

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...