java - 将 session bean 注入(inject)实体

标签 java jpa java-ee-6 cdi ejb-3.1

我正在使用 EJB3.1、CDI 和持久域对象模式编写 JEE6 应用程序。 在某些情况下,我需要在实体 (jpa2.0) 中有一个 session bean 的实例。 使用@Inject 或@EJB 注入(inject)它不起作用。它始终是空引用。

唯一可能的解决方案是通过 InitialContext 进行查找。但这真的很糟糕。 有谁知道如何从实体访问 session bean 的解决方案吗?

我读过有关无状态 session bean 工厂的内容,但找不到任何示例。

最佳答案

实体是由你创建的,如果你想将 beans 注入(inject)到它们中,它们应该由容器创建。

从技术上讲,您可以让 CDI 容器管理您的实体,而不是使 new YourEntity 使用 @Inject @New YourEntity entity。但这有点违反直觉。我没试过。

这是关于贫血数据模型与领域驱动设计的更广泛讨论的一部分。 IE。您的实体是否应该是没有任何行为的数据持有者,或者他们也应该有逻辑(并隐藏他们的状态)

关于java - 将 session bean 注入(inject)实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133594/

相关文章:

java - 使用 JPA 使用 @ElementCollection 从 @CollectionTable 中删除条目

jakarta-ee - @ApplicationScoped CDI bean 和 @PersistenceContext - 这安全吗?

java - 密码错误时登录表单不显示验证消息

java - 当我已经拥有 BufferReader 对象时,为什么它要求我用 try catch 包围它?

java - Java 中通过反射将字段转换为数组类型

Java 真正的全局变量(Android 版 Eclipse)

java - Hibernate映射异常: Foreign key must have same number of columns as the referenced primary key

java - 我应该如何将 SQLException 包装到未经检查的?

java - Spring Data JPA - 删除子实体而不是在更新时设置为空?

java - 如何将一个 EJB 3.1 注入(inject)另一个 EJB