在无状态bean

时间:2016-05-09 20:10:43

标签: java hibernate jpa dependency-injection cdi

有人可以解释无状态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时,我得到一个&#34; java.lang.IllegalArgumentException:实体未被管理&#34;。注入了entityManager,因此我假设它始终是当前持久化上下文的一部分。真的吗?

在刷新之前添加em.merge(timeSteps.get(0))仍会生成相同的异常。

1 个答案:

答案 0 :(得分:0)

您的timeSteps是一个州。你的课程注释为无国籍。这是对框架的滥用。