jpa - 如何使用实体类获取entityManager

标签 jpa ejb

如何联系管理该实体的实体管理者。我是说;假设我在 sessionBean 中有一个实体引用,我如何获取该实体所属的实体管理器? 我已经尝试过(请参阅 getEntityManagerOfEntity() 方法)包含 em 的方法;但它不起作用。

谢谢 背景

@Stateless(name = "MainManager", mappedName = "MainManager")
@TransactionManagement(TransactionManagementType.CONTAINER)
@Interceptors(value = { PerformanceMonitor.class, ProfileInterceptor.class })
public class MainManagerBean implements MainManager, MainManagerLocal
{
    private Logger logger = Logger.getLogger(this.getClass());

    @PersistenceContext(unitName = "DSApp")
    private EntityManager manager;

    @PersistenceContext(unitName = "DSIX")
    private EntityManager integrationManager;

    @Resource
    SessionContext ctx;



public EntityManager getEntityManagerOfEntity(SuperEntity superEntity)
{
    if (manager.contains(superEntity))
        return manager;
    else if (integrationManager.contains(superEntity))
        return integrationManager;

    return null;
}



public SuperEntity findByPrimaryKey(SuperEntity superEntity)
{
    getEntityManagerOfEntity(superEntity).setFlushMode(FlushModeType.COMMIT);
    return dao.findByPrimaryKey(getEntityManagerOfEntity(superEntity), superEntity);

最佳答案

您无法使用 JPA API 从实体回溯 EntityManager,即使它仍处于托管状态。

如果您在 Bean 中引用了不同的 EM 并且实体受到管理,您可以做的是通过调用 em.contains(entity) 检查正确的 EM。

在大多数情况下,知道哪个 EM 最初获取了实体并不重要,因为您可以将该实体合并到任何持久性上下文中并继续使用它。

关于jpa - 如何使用实体类获取entityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900426/

相关文章:

java - JSF 隐藏异常?

jakarta-ee - 使用有状态 ejb 的 TimerService 的解决方法

jsf - 全局 JSF 异常处理程序无法捕获所有错误

java - 交易回滚?

java - NullPointerException 尝试更新包含带有版本字段的数据透视表的实体

java - @EJB 注释导致 servlet 停止工作

java - session bean 中的 EntityManager 异常处理

java - 使用 JPA 和 ObjectDB 按 id 选择多个对象?

java - 具有 2 个主键字段的 JPA 表

带有 SQL Server 的 Java JPA/Hibernate - 如何检测数据库中的列何时未被实体模型映射?