Разница между аннотациями JPA Cascade и аннотацией Hibernate Cascade

Я попробовал кое-что с аннотациями Hibernate. Когда я попытался использовать Cascading, я получил две опции в Eclipse intellisense:

    javax.persistence.CascadeType and org.hibernate.annotations.CascadeType

В hibernate CascadeType есть много опций, чем в JPA.

Есть ли преимущество одного над другим?

1 ответ

Решение

Аннотации javax.persistence являются спецификацией стандартов. Hibernate аннотации представляют конкретную реализацию Hibernate. Они в основном перекрываются, но Hibernate CascadeType предоставляет некоторые дополнительные параметры, специфичные для Hibernate.

Как правило, используйте аннотации javax.persistence, когда это возможно. Используйте вариант Hibernate только в том случае, если вам нужен один из параметров, относящихся к Hibernate, и вы знаете, что вам, скорее всего, никогда не потребуется переключаться на другого поставщика сохраняемости.

Многие люди смешивают аннотации JPA/Hibernate в рамках одного проекта, что вполне допустимо. Тем не менее, могут быть тонкие взаимодействия, такие как это с участием CascadeType:

http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/

Посмотрите в коде, @OneToMany из JPA, он ожидал каскад JPA - javax.persistence.CascadeType. Однако при сохранении в сеансе Hibernate org.hibernate.engine.Cascade выполнит следующую проверку

...

Процесс сохранения Hibernate будет вызывать действие ACTION_SAVE_UPDATE, но JPA будет передавать ACTION_PERSIST и ACTION_MERGE, он не будет совпадать, и каскад не будет выполнен.

Другие вопросы по тегам