簡體   English   中英

將EntityManager的作用域/生命周期注入到無狀態Bean中

[英]Injected EntityManager's scope/lifecycle in a Stateless bean

有人可以解釋無狀態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:實體不受管理”。 注入了entityManager,因此我假設它始終是當前持久性上下文的一部分。 真的嗎?

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

您的timeSteps是一種狀態。 您的班級被注釋為無狀態。 這是對框架的濫用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM