如何使用实体类获取entityManager

时间:2013-04-09 11:18:03

标签: jpa ejb

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

THX bgrds

@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);

1 个答案:

答案 0 :(得分:1)

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

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

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