在不同的 EJB 中获取和处理实体 Bean

Posted

技术标签:

【中文标题】在不同的 EJB 中获取和处理实体 Bean【英文标题】:Fetching and Processing Entity Beans in different EJBs 【发布时间】:2020-03-23 11:45:42 【问题描述】:

我开发和应用程序使用 JPA 和无状态 EJB。基本上,应用程序包括负责实现业务案例的 EJB 以及负责从底层数据库中获取和删除数据的 EJB。

例子:

public interface UserContextAccessEJBLocal 

 /**
  * Persists the passed instance of @link UserContex.
  * 
  * @param userContext an instance of @link UserContext
  * @throws NullPointerException if userContext is null. 
  * @throws IOException if an I/O related error occurs.
  */
 void remove(UserContext userContext)
            throws IOException;

我的问题:如果在 EJB A 中获取 JPA 实体并将其传递给 EJB B,我是否可以假设传递的实例属于由注入 B 的 EntityManager 管理的持久性上下文,或者我必须提取它的 ID 重新取回了吗?

关于我的问题,无状态和有状态 EJB 有区别吗?

【问题讨论】:

【参考方案1】:

您应该避免在不同事务之间传递实体,但在 EJB 之间传递实体不是问题,只要调用作为加载实体的调用的同一事务的一部分发生。

为了进一步帮助您,我们需要一个具体示例来说明您如何以及为什么在 EJB 之间传递实体,也许一开始这甚至没有必要。

【讨论】:

谢谢!我现在必须实现这部分,所以目前无法向您展示实际代码。

以上是关于在不同的 EJB 中获取和处理实体 Bean的主要内容,如果未能解决你的问题,请参考以下文章

从 JPA/EJB3 持久性上下文中分离实体

java 实体bean 的比较,并获取2个实体中不同的属性

迁移 EJB2.x BMP 实体 bean

关于EJB--实体Bean的BMP和CMP选择

EJB_开发单表映射的实体bean

EJB3.0的一些学习