EJB和JPA有什么关联?

18

我正在阅读《EJB 3 in Action》一书,我有以下问题:
用 @Entity 注释的 POJO 是否也是 EJB 实体类型?

我不理解 JPA 与 EJB 的关系。JPA 不是现在自己的规范吗?实体也包含在自己的持久化容器中。他们谈论 EJB 3 Java Persistence API 等等,但我不明白实体与 EJB 有什么关系。


你的问题很棒。 - giannis christofakis
3个回答

17

JPA旨在替代EJB2实体Bean,最初是EJB3规范的一部分。

由于在EJB容器之外使用JPA也很有意义,因此现在它有了自己的规范,但仍然与EJB3相关,因为符合EJB3规范的容器必须提供JPA实现,并将其集成到容器的事务处理中。


所以尽管它现在不再那么紧密地绑定,但EJB规范仍然需要一个实现,这就是为什么它被视为EJB世界中的第三个组件类型的原因? - LuckyLuke
1
EJB2有“实体Bean”,它们是第三种组件类型。EJB3有JPA,其中包含“实体”。但我认为它们不再被视为“EJB组件”。它们只被称为JPA实体。 - JB Nizet

9

在EJB规范的2.1版本之前,实体Bean类必须实现javax.ejb.EntityBean接口并提供ejbLoad,ejbStore,ejbActivate和ejbPassivate等样板方法的实现。

EJB 3.0采用了JPA规范。实体Bean的概念被更简单的JPA实体所取代。创建此类实体时,不需要接口实现或样板方法。该实体是一个具有@Entity注释的POJO。

因此,在实践中,使用Java EE应用程序中的“实体Bean” EJB已经被JPA取代,从EJB 3开始不再使用。


3
你说得对。JPA的作用不仅仅是支持EJB。这就是为什么JPA成为了一个独立的JSR或规范的原因。简单地说,EJB在其规范中使用或启用了JPA,因为JPA是一个很好的标准。如果设计得当,您现在可以在不改变代码的情况下切换JPA供应商。
虽然JPA已包含在EJB规范中,但EJB规范也可以独立于JPA使用。同样地,JPA也可以用于EJB规范之外的许多其他内容。尽管如此,EJB规范使JPA实体管理器(及其使用)易于注入其bean中,从而使编程更加容易。当然,现在可以使用CDI的新JSR轻松实现这一点。
所有支持EJB规范的应用服务器都应该支持JPA。您可以查看此线程以获取更多信息:(链接)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接