在 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 的目的是什么。是否已经在 JPA/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