我正在尝试使用Hibernate注释。当我尝试使用Cascading时,我在Eclipse intellisense 中得到两个选项:
javax.persistence.CascadeType and org.hibernate.annotations.CascadeType
在hibernate CascadeType 中,给出了许多选项,而不是JPA的选项。
一个人有什么优势吗?
答案 0 :(得分:8)
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保存它时 session,org.hibernate.engine.Cascade将执行以下检查
...
Hibernate保存过程将导致ACTION_SAVE_UPDATE操作, 但是JPA会传递一个ACTION_PERSIST和ACTION_MERGE,它不会 匹配并导致级联无法执行。