5

我在我们的项目中使用 Hibernate,并为 Hibernate Domain Pojo 对象使用基于注释的配置。对于基于注释的配置,我们有两个选项

  1. 基于 JPA 的注释使用javax.persistence.*
  2. 使用 Hibernate 原生注解org.hibernate.annotations.*

目前我们对 POJO 文件使用基于 JPA 的注解配置,并使用 SessionFactory、Session 等 Hibernate 原生 API 来打开会话并执行 DB 操作。

我有这些问题:

  1. 混合 JPA 注释和使用 Hibernate 本机 API 是否有任何问题?
  2. 这个链接解释了一个这样的问题(cascade-jpa-hibernate-annotation-common-mistake)
  3. 请提供您的专业知识,使用哪种类型的注释
    1. JPA
    2. 休眠原生
    3. 两者混合?
4

2 回答 2

6

Hibernate 提供了一种 JPA 实现。如果您在代码中使用纯 JPA,则在出现需求时可以自由更改为不同的实现。例如,EclipseLink/TopLinkOpenJPA是不同客户可能需要的实现。一个完整的实现列表在这里

如果您被迫使用 hibernate 提供的任何不属于 JPA 规范的奇异特性,那么您应该在代码库中使用 hibernate 特定的 API。这里有来自休眠论坛的相关讨论。

于 2013-04-17T05:53:10.317 回答
2

我们混合了其中的一些注释,因为当时我们使用的是 hibernate 版本,当时 JPA 规范中没有一些功能。例如,要将布尔值存储为“Y”或“N”在数据库上,您可以使用休眠类型。但是当时 JPA 规范中没有这样的功能。我不知道现在的状态。同样对于孤儿删除,那些日子 JPA 没有该功能,但现在我相信他们在您的级联选项上提供了一个名为 orphanRemoval 的属性。此外,您还具有某些功能,例如 @BatchSize 来提高袋子的抓取性能。我不知道这些功能是否在 JPA 规范中可用。

以我的经验,混合和匹配两者的加分将是有益的,因为您不需要从一个 ORM 切换到另一个。

于 2013-04-17T08:10:15.537 回答