我在Hibernate Domain Pojo Objects的项目和基于注释的配置中使用Hibernate。对于基于注释的配置,我们有两个选项
javax.persistence.*
的基于JPA的注释org.hibernate.annotations.*
目前,我们为POJO文件和Hibernate本机API(如SessionFactory,Session等)使用基于JPA的注释配置来打开会话并执行数据库操作。
我有这些问题:
Hibernate提供了一个JPA实现。如果您在代码中使用纯粹的JPA,则可以在需要时自由更改为其他实现。例如,EclipseLink/TopLink和OpenJPA是不同客户可能需要的实现。完整的实现列表是here。
如果您被迫使用hibernate提供的任何不在JPA规范中的异乎寻常的功能,您应该在代码库中使用特定于hibernate的API。来自hibernate论坛here的相关讨论。
我们混合了其中一些注释,因为当时我们正在使用hibernate的版本,当时JPA规范上没有一些功能。例如,要将一个布尔值存储为数据库中的“Y”或“N”,您可以使用休眠类型。但当时JPA规范没有提供此类功能。我现在不知道现状。同样对于孤儿删除也是那些日子JPA没有这个功能,但现在我相信他们在你的级联选项上提供了一个名为orphanRemoval的属性。此外,您还拥有某些功能,例如@BatchSize,以提高相关行李的抓取性能。我不知道JPA规范上是否有这样的功能。
根据我的经验,混合和匹配以及两者的加分都是有益的,因为您无需从一个ORM切换到另一个ORM。