Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 如何使用实体类获取entityManager_Jpa_Ejb - Fatal编程技术网

Jpa 如何使用实体类获取entityManager

Jpa 如何使用实体类获取entityManager,jpa,ejb,Jpa,Ejb,如何联系管理实体的实体经理。我是说;假设我在sessionBean中有一个实体引用,我如何获得这个实体的entityManager? 我已经尝试过(请参见getEntityManagerOfEntity()方法)包含em的方法;但它不起作用 Thx bgrds 您不能从使用JPA API的实体中回溯EntityManager,即使它仍然处于管理状态 如果您在bean中有对不同EMs的引用,并且实体被管理,那么您可以做的是通过调用EM.contains(entity)来检查正确的EM 在大多数情况

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

Thx bgrds


您不能从使用JPA API的实体中回溯
EntityManager
,即使它仍然处于管理状态

如果您在bean中有对不同EMs的引用,并且实体被管理,那么您可以做的是通过调用
EM.contains(entity)
来检查正确的EM


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

您只能在使用供应商扩展时这样做。DataNucleus JPA提供了NucleusJPAHelper.getEntityManager(obj)作为例子。出于好奇-为什么要这样做?你能更清楚地说明你的用例吗?甚至在生命周期方法中也不建议您使用EntityManager(在JPA2.0中正式使用AFAIR)。我需要它,这就是为什么要为多个数据源创建通用方法的原因。我试图通过在我的项目MainManagerBean中命名的stateles sessionbean来联合crud方法。Thx 4您的评论您确定该实体真的属于某个实体经理吗?-Adam Dyga 3小时前1次投票-请将此代码移至问题(更新)。StackOverflow不是一个公告板Piotr Nowicki 3小时前,还有一个问题需要回答:调用getEntityManagerOfEntity()函数时,您是否处于同一事务中?您确定其中一个EM应使您的实体处于托管状态吗?-Piotr Nowicki 3小时前是的,我确信实体属于一个em。谢谢Novicki先生考虑。目前,它作为2个spereate find方法工作。一个是findByPrimaryKeyWithinManager(实体),另一个是findByPrimaryKeyWithinIntegrationManager(实体集成)。在这种情况下也是如此。但是,正如我所说;如果我通过findByPrimaryKey方法调用getEntityManagerOfEntity。getEntityManagerOfEntity方法返回null,这就是为什么if子句的求值为false。无状态sessionBean会导致这个问题吗(此外,当我在调试期间跟踪时,我在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);