java - Hibernate 和 JPA,用什么,用在哪里?

标签 java hibernate orm jpa ejb-3.0

有人可以向我解释一下 JPA 和 Hibernate 之间的主要区别是什么吗?

在哪里使用 Hibernate?

在哪里使用 JPA?

为什么不是实体 bean?

最佳答案

一点历史:

实体 bean 是 EJB 1 和 2 的一部分。它们很难使用,因此需要一个替代方案。然后Hibernate出现了。 (我不记得这些时间了)

Hibernate 发展成为对象关系映射中的事实上的标准。然后决定需要一个标准,因此创建了受 Hibernate 影响很大的 JPA 规范。

JPA 只是一个规范 - 它定义了 ORM 框架应该做什么,以及它应该支持哪些注释。 JPA 由许多供应商实现 - Hibernate、EclipseLink、OpenJPA 等。

所以:

  • 不要使用实体 bean
  • 使用您喜欢的任何 JPA 实现。 Hibernate 绝对是一个不错的选择。

更新:关于评论中的次要问题:

是的,您可以将 JPA 与 EJB session bean 一起使用:

@Stateless
public class YourSessionBean implements RemoteInterface {

     @PersistenceContext
     private EntityManager entityManager; // this is the JPA EntityManager
}

并且您拥有由容器注入(inject)的实体管理器并准备好操作 JPA 实体。当然你需要为此进行配置,但这超出了这个问题的范围。

关于java - Hibernate 和 JPA,用什么,用在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108957/

相关文章:

java - 无法在 hibernate 状态下保留哈希集

java - hibernate :flush() 和 commit()

java - 使用 POJO 仅更新 JOOQ 记录中的更改字段

java - Hibernate 延迟加载 + Jersey REST = 急切加载?

java - 在 Swing 组布局中手动添加自定义组件

java - Volley 补丁错误

java - 奇怪的 NullPointerException

使用反射使用任何构造函数实例化任何类的 Java 泛型方法

hibernate - @Transactional(readOnly = true) 未按 Spring 框架版本 5.2 的预期工作

java - hibernate 标准 API : get n random rows