在 Hibernate/JPA 中,我应该在哪里以及在哪个用例中使用 SessionFactory 和 Session

Posted

技术标签:

【中文标题】在 Hibernate/JPA 中,我应该在哪里以及在哪个用例中使用 SessionFactory 和 Session【英文标题】:Where and in which use case should I use SessionFactory and Session in Hibernate/ JPA 【发布时间】:2021-05-09 10:24:12 【问题描述】:

我正在学习 Hibernate 和 JPA,我知道它们之间的区别。在探索来自 github 的代码时,我检查了一些项目。但是我没有找到 Session/SessionFactory 的用法(我也读过 EntityManagerFactory)。这些项目正在使用 JPARepository。 Session/SessionFactory 的目的是什么。是否已经在 J​​PA/Hibernate 最新版本中自动处理?

请指导我。

【问题讨论】:

【参考方案1】:

Hibernate 是 JPA 规范的一种实现,它早于 JPA 定义的接口,因此它有自己的 API,您可以与之交互。除此之外,Hibernate 还通过其 API 提供了更多 JPA 未指定的功能。

通常,只需针对EntityManager/EntityManagerFactory 接口进行编程并使用unwrap() 访问Session/SessionFactory 即可,如果您需要一些Hibernate 特定功能。这就是为什么你很少看到Session/SessionFactory 的使用。这样做的一个主要原因是为了提高可移植性。我认为只是在 JPA 提供程序之间切换 是不合理的,就像在数据库之间切换通常是不合理的一样。如果您想充分利用您的系统,您将在某个时候使用您使用的项目/产品的专有功能,这很好。使用 JPA API 的另一个很好的理由是周围有很多学习材料,因为它适用于所有 JPA 兼容的实现。由于 JPA 有一个规范文档,如果您想知道某些东西应该如何工作,您也可以阅读该文档。尽管 Hibernate 也有参考文档,但它可能在各个方面都没有 JPA 规范那么详细。

【讨论】:

以上是关于在 Hibernate/JPA 中,我应该在哪里以及在哪个用例中使用 SessionFactory 和 Session的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security JDBC 和 Hibernate JPA

MyEclipse中自动整合Spring3+Hibernate/JPA

在 2 个表之间拆分 Hibernate 实体

Spring Hibernate JPA 联表查询

Spring+Hibernate+JPA的多数据库

Spring Hibernate JPA 联表查询 复杂查询