使用哪种注释(Hibernate或JPA)更好?

6
我在我们的项目中使用Hibernate,并使用基于注释的配置来配置Hibernate Domain Pojo Objects。对于基于注释的配置,我们有两个选项:
  1. 使用JPA注释,例如javax.persistence.*
  2. 使用Hibernate本地注释,例如org.hibernate.annotations.*
目前,我们在POJO文件中使用JPA基于注释的配置,使用Hibernate本地API(例如SessionFactory、Session等)打开会话并执行数据库操作。
我有以下问题:
  1. 混合使用JPA注释和Hibernate本地API是否有问题?
  2. 这个链接解释了一个问题(cascade-jpa-hibernate-annotation-common-mistake)。
  3. 请提供您的专业知识,应该使用哪种类型的注释?
    1. JPA
    2. Hibernate本地
    3. 两者混合使用?
2个回答

7
Hibernate提供了JPA实现之一。如果您在代码中纯粹使用JPA,那么如果需要,您可以自由更改为不同的实现。例如,EclipseLink/TopLinkOpenJPA是可能需要为不同客户端提供的实现。完整的实现列表在这里
如果您被迫使用Hibernate提供的任何不在JPA规范中的奇特功能,则应在代码库中使用Hibernate特定的API。有关来自Hibernate论坛的相关讨论,请参见此处

3
我们混合了一些这些注释,因为我们当时使用的hibernate版本,某些功能在当时的JPA规范中不可用。例如,如果要将布尔值存储为“Y”或“N”,则可以使用hibernate类型。但是在那个时候,JPA规范中没有这样的功能。我不知道现在的状态如何。此外,在孤立删除方面,那些天JPA也没有这个功能,但现在我相信他们在级联选项上提供了一个名为orphanRemoval的属性。另外,您还有某些功能,比如 @BatchSize 可以提高针对 bags 的获取性能。我不知道这样的功能是否仍然可用于JPA规范中。
根据我的经验,混搭并从两者中选择优点会很有益,因为您不需要从一个ORM切换到另一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接