gpt4 book ai didi

jpa - EJB 3.0和JPA之间的关系?

转载 作者:行者123 更新时间:2023-12-02 01:08:57 25 4
gpt4 key购买 nike

这似乎是显而易见的,但我见过相互矛盾的陈述:JPA 是 EJB 3.0 的一部分吗?我不是专家,这让我很困惑。

如果是这样,JPA 操作实体 Bean?这些实体 bean 是持久层和业务层之间的接口(interface),使用无状态 bean 实现逻辑?

对我来说,根本问题是如何实现“根据各种条件搜索用户”功能,其中应该构建“搜索”请求(其字符串表示形式)?我的意思是,如果 JPA 不是 EJB 的一部分,我的 Bean 不应该了解数据模型,对吗?

边界在哪里?

最佳答案

Is JPA part of EJB 3.0 ?

是和否...因为每个声称实现 EJB 3.0 规范的应用程序服务器还必须提供 JPA 实现。 ,因为 JPA 可以轻松地位于 EJB 之外、独立应用程序或 Spring 管理的应用程序中。

JPA manipulates Entity Beans ?

实体 bean 在 3.0 之前的 EJB 中是一个可怕的想法。 JPA 使用“实体”一词来区分自己与不光彩的历史。但是,JPA 实体是一种将数据库表映射到普通 Java 对象的方法。原则上对对象所做的更改会传播到数据库,反之亦然(过于简单化)。

正如我所说,JPA 不依赖于 EJB(被视为无状态和有状态 session Bean),反之亦然。但是没有什么可以阻止您在 EJB 中使用 JPA。

在您的场景中,您将有一个无状态 EJB 构建查询并通过 JPA 与数据库交互。从技术上讲,您将调用注入(inject)到您的 bean 的 EntityManager 上的方法:

@Stateless
public class SearchService {

@PersistenceContext
private EntityManager em;

public List<User> findUsersBornAfter(Date date) {
return em.
createQuery("SELECT u FROM User u WHERE u.birthDate > :birthDate ORDER BY name").
setParameter("birthDate", date).
getResultList();
}
}

正如您所看到的,业务层(显然)知道数据模型,但就实体而言,不依赖于 EJB/业务服务。在此示例中,JPQL(查询)在服务层中形成,User 是一个 JPA 实体。调用 getResultList() 会导致 JPA 提供程序将 JPQL 转换为 SQL、运行查询并将结果转换回 User 对象实例。

EJB 和 JPA 之间的界限现在清楚了吗?

关于jpa - EJB 3.0和JPA之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7945859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com