Типы каскада Hibernate и JPA, когда использовать какой и где

Я использую Hibernate в проекте, и я полностью запутался, когда использовать org.зимовать.комментарии.CascadeType и когда использовать javax.стойкость.CascadeType аннотации.

например, когда я должен использовать что-то вроде этого:

@OneToMany(fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL)

vs что-то вроде этого:

@OneToMany(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)

Я также прочитал, что hibernate будет игнорировать некоторые каскадные типы, которые находятся в аннотациях one to xxxx. Кто-нибудь может меня просветить?

1 ответов


В общем, вы найдете много примеров такого рода перекрытия при использовании гибернации. Этому может быть несколько различных причин. Либо это из-за устаревших причин (Hibernate создал аннотацию до того, как она была стандартизирована в JPA), либо потому, что Hibernate поддерживает больше функций, чем позволяет стандарт JPA, либо потому, что они немного отличаются по своей семантике.

В этом случае Hibernate документация очень понятно почему , когда @OneToMany(cascade=...) стандартные. Аннотация Hibernate (@Cascade) дает вам гораздо больше вариантов, чем стандартный JPA, и он также имеет немного другую семантику.

вы всегда должны предпочитать использовать стандартные аннотации JPA, если вам не нужна специальная функция/семантика Hibernate.