首页 文章

Hibernate和Spring Data JPA有什么区别

提问于
浏览
126

Hibernate和Spring Data JPA之间的主要区别是什么?什么时候不应该使用Hibernate或Spring Data JPA?另外,什么时候Spring JDBC模板的性能比Hibernate / Spring Data JPA好?

4 回答

  • 166

    Hibernate是一个JPA实现,而Spring Data JPA是一个JPA数据访问抽象 . Spring Data为 GenericDao 自定义实现提供了解决方案 . 它还可以通过方法名称约定代表您生成JPA查询 .

    使用Spring Data,您可以使用Hibernate,Eclipse Link或任何其他JPA提供程序 . 一个非常有趣的好处是you can control transaction boundaries declaratively using the @Transactional annotation .

    Spring JDBC更轻量级,它用于本机查询,如果您只打算单独使用JDBC,那么最好使用Spring JDBC来处理JDBC详细程度 .

    因此,Hibernate和Spring Data是互补而不是竞争对手 .

  • 83

    我们在这里使用了3种不同的东西:

    • JPA:Java持久性api,它提供了从java对象到数据库中的关系的持久化,读取,管理数据的规范 .

    • Hibernate:有各种提供程序实现jpa . Hibernate就是其中之一 . 所以我们也有其他提供商 . 但是如果使用带 spring 的jpa,它允许你将来切换到不同的提供商 .

    • Spring Data JPA:这是jpa之上的另一层, Spring 天提供让你的生活更轻松 .

    所以让我们了解 spring data jpa and spring + hibernate 如何工作 -


    Spring Data JPA:

    假设您正在为您的应用程序使用spring hibernate . 现在你需要有dao接口和实现,你将使用hibernate的SessionFactory编写crud操作 . 假设您正在为Employee类编写dao类,明天在您的应用程序中,您可能需要为任何其他实体编写类似的crud操作 . 所以我们可以在这里看到很多样板代码 .

    现在,Spring数据jpa允许我们通过扩展其存储库(crudrepository,jparepository)来定义dao接口,以便它在运行时为您提供dao实现 . 你不需要再写dao实现了 . 看看spring data jpa如何让你的生活更轻松 .

  • 9

    我不同意SpringJPA使现场变得容易 . 是的,它提供了一些类,你可以快速制作一些简单的DAO,但实际上,你可以做到 . 如果你想做更多的事情而不是findById()或保存,你必须经历地狱:

    • org.springframework.data.repository类中没有EntityManager访问权限(这是基本的JPA类!)

    • 自己的事务管理(不允许hibernate事务)

    • 多个数据源配置存在巨大问题

    • 没有数据源池(HikariCP必须作为第三方库使用)

    为什么自己的交易管理是一个劣势?由于Java 1.8允许将默认方法转换为接口,因此基于Spring注释的事务简单不起作用 .

    不幸的是,SpringJPA基于反射,有时您需要将方法名称或实体包指向注释(!) . 这就是为什么任何重构都会导致严重崩溃的原因 . 可悲的是,@ Transactal仅适用于主DS :(因此,如果您有多个DataSource,请记住 - 事务只适用于主要的:)

    Hibernate和Spring Data JPA之间的主要区别是什么?

    Hibernate是JPA兼容,SpringJPA Spring兼容 . 您的HibernateJPA DAO可以与JavaEE或Hibernate Standalone一起使用,当SpringJPA可以在Spring中使用时 - 例如SpringBoot

    我们什么时候不应该使用Hibernate或Spring Data JPA?另外,什么时候Spring JDBC模板的性能比Hibernate / Spring Data JPA好?

    仅在需要使用多个联接或需要使用具有多个数据源连接的Spring时才使用Spring JDBC . 通常,避免JPA加入 .

    但我的一般建议,使用新鲜的解决方案 - Daobab(http://www.daobab.io) . Daobab是Java和任何JPA引擎集成商,将在您的任务中提供很多帮助:)

  • 1

    Hibernate是“JPA”的实现,它是数据库中Java对象的规范 .

    我建议使用w.r.t JPA,因为你可以在不同的ORMS之间切换 .

    当您使用JDBC时,您需要使用SQL查询,因此如果您精通SQL,那么请使用JDBC .

相关问题