Разница между аннотациями 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, он не будет совпадать, и каскад не будет выполнен.