代码之家  ›  专栏  ›  技术社区  ›  Isabel Jinson

Hibernate和JPA,使用什么,在哪里?

  •  7
  • Isabel Jinson  · 技术社区  · 15 年前

    有人能给我解释一下JPA和Hibernate的主要区别吗?

    在哪里使用JPA?

    为什么不是实体bean?

    6 回复  |  直到 14 年前
        1
  •  7
  •   Bozho    14 年前

    一点历史:

    实体bean是EJB1和EJB2的一部分,它们是很难使用的,因此需要一种替代方法。然后冬眠出现了(我不记得这些时候了)

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

    • 使用任何您喜欢的JPA实现。冬眠绝对是个不错的选择。

    更新: 关于你在评论中的第二个问题:

    @Stateless
    public class YourSessionBean implements RemoteInterface {
    
         @PersistenceContext
         private EntityManager entityManager; // this is the JPA EntityManager
    }
    

    容器注入了实体管理器,可以操作JPA实体。当然,您需要对此进行配置,但这超出了问题的范围。

        2
  •  3
  •   ewernli    15 年前

    JPA是一个规范。Hibernate是这个规范的一个实现,另一个实现是Toplink,但是还有其他的实现。

    您应该尽量依赖标准JPA特性。不过,有一些特定于Hibernate的有用特性,但是如果您决定切换实现,这些特性会降低应用程序的可移植性。

    实体bean是指EJB2.x实体bean?这是一个“死”的技术,被证明是太难使用。

        3
  •  2
  •   Peter Tillemans    15 年前

    我发现从实用的角度来看,包括hibernate在内的所有JPA实现都非常相似,并且适用于相同的用例。然而,如果它们被用于非设计用途的东西,它们往往有点,嗯……,脾气暴躁。

    iBatis允许您在单独的文件中编写纯SQL查询,并将它们映射到java对象。这使得SQL代码不会出现在Java代码中。为查询指定一个名称,并在代码中引用该名称。这对于需要与集成的大型遗留数据库非常有效。

    对于一些简单的非正式查询,像springjdbctemplate这样的东西也可以在没有前面框架的认知负载的情况下工作。

        4
  •  1
  •   vlood    15 年前
        5
  •  1
  •   Pablo Santa Cruz    15 年前

    差异很微妙,很难理解:

    1. JPA是javaee的对象关系映射API。在地球上的每一个完整的javaee应用服务器中都应该有JPA。
    2. Hibernate是JBoss对JPA的实现。人们经常混淆两者的原因是JPA在Hibernate上受到了一些启发。
        6
  •  0
  •   DataNucleus    15 年前

    JPA的一些主要供应商的名单在上面 http://en.wikipedia.org/wiki/Java_Persistence_API 在JPA2部分下。

    最好自己决定实现,因为支持应用程序的是您,但始终坚持基于标准的特性,而不是“附加组件”;从长远来看你会受益的