无状态bean中注入java的entitymanager的作用域/生命周期

brtdzjyr  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(501)

有人能解释无状态bean中注入的entitymanager的生命周期吗?如果无状态bean有一个与特定persistencecontext关联的注入entitymanager,那么在第二次使用该bean时,该关联会发生什么?
例如,我有以下内容:

@Stateless
public class TimeStepsBean
{       
    @PersistenceContext(unitName="DynamicDB")
    private EntityManager em;       

    public List<TimeStep> timeSteps = new ArrayList<TimeStep>();

    private void init()
    {
        if (timeSteps.isEmpty())
        {
            TypedQuery<TimeStep> query = em.createQuery("SELECT t FROM TimeStep t", TimeStep.class);
            timeSteps = query.getResultList();. 
        }
    }

    public void refreshSteps() 
    {
        init(); 
        em.flush(); 
        em.refresh(timeSteps.get(0));               
    }
}

当第二次使用bean(第二个事务)调用refreshsteps时,我得到一个“java.lang.illegalargumentexception:entity not managed”。entitymanager是注入的,所以我假设它始终是当前持久性上下文的一部分。是真的吗?
在刷新之前添加em.merge(timesteps.get(0))仍然会生成相同的异常。

vd8tlhqk

vd8tlhqk1#

你的时间步是一个状态。您的类被注解为无状态。这是对框架的滥用。

相关问题