要使用的Hibernate或JPA注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了要使用的Hibernate或JPA注释相关的知识,希望对你有一定的参考价值。

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

  1. 使用javax.persistence.*的基于JPA的注释
  2. 使用Hibernate Native Annotations org.hibernate.annotations.*

目前,我们为POJO文件和Hibernate本机API(如SessionFactory,Session等)使用基于JPA的注释配置来打开会话并执行数据库操作。

我有这些问题:

  1. 混合JPA注释和使用Hibernate本机API有什么问题吗?
  2. 这个link解释了一个这样的问题(cascade-jpa-hibernate-annotation-common-wrong)
  3. 请提供您的专业知识,使用哪种注释 JPA Hibernate原生 混合他们两个?
答案

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

如果您被迫使用hibernate提供的任何不在JPA规范中的异乎寻常的功能,您应该在代码库中使用特定于hibernate的API。来自hibernate论坛here的相关讨论。

另一答案

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

根据我的经验,混合和匹配以及两者的加分都是有益的,因为您无需从一个ORM切换到另一个ORM。

以上是关于要使用的Hibernate或JPA注释的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate @LazyToOne 注释的 JPA 等价物是啥?

JPA 或 Hibernate 生成(非主键)列值,不是从 1 开始

如何将继承策略与 JPA 注释和 Hibernate 混合使用?

使用 H2、JPA 注释和 Hibernate 问题的一对多关联

从 JPA 注释的实体类自动生成数据模式

Spring Security 3 身份验证与 Hibernate 3(JPA) 注释的集成