Типы каскада 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.