我正在阅读动态书中的EJB 3,我有以下问题:
您是否使用@Entity编写和注释POJO,以及EJB实体类型?
我不明白JPA与EJB有什么关系。 JPA现在不是一个自己的规范吗?实体也包含在自己的持久性容器中。他们谈论EJB 3 Java Persistence API等,但我不明白实体与EJB有什么关系。
答案 0 :(得分:17)
JPA旨在取代EJB2实体bean,并且已作为EJB3规范的一部分启动。
由于在EJB容器之外也使用JPA是有意义的,它现在有自己的规范,但它仍然与EJB3相关,因为兼容的EJB3容器必须提供JPA实现,它集成到事务处理中。容器。
答案 1 :(得分:9)
直到EJB规范的2.1版本,实体bean类必须实现javax.ejb.EntityBean
接口并提供样板方法的实现,例如ejbLoad,ejbStore,ejbActivate和ejbPassivate。
EJB 3.0采用了JPA规范。实体bean的概念被更简单的JPA实体概念所取代。要创建此类实体,不需要任何接口实现或样板方法。实体是具有@Entity
注释的POJO。
因此,实际上,从EJB 3开始,在Java EE应用程序中使用“实体bean”EJB已经死了(埋在JPA下)。
答案 2 :(得分:3)
你是对的。 JPA除了仅支持EJB之外还有更多工作要做。这就是为什么JPA成为一个单独的JSR或规范的原因。 EJB在其规范中使用或允许使用JPA,因为JPA是一个很好的标准。如果设计正确,您现在可以在JPA供应商之间切换而无需更改代码。
EJB规范可以独立于JPA使用(尽管JPA已作为EJB规范的一部分包含在内),同样JPA可用于EJB规范之外的更多内容。尽管如此,EJB规范可以非常轻松地将JPA Entitiy Manager(及其用法)注入到bean中,从而使编程更容易。当然,现在可以使用CDI上的新JSR轻松实现: - )。
所有支持EJB规范的应用服务器,也应该支持JPA。您可以查看this thread以获取更多信息。