有人能解释无状态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))仍然会生成相同的异常。
1条答案
按热度按时间vd8tlhqk1#
你的时间步是一个状态。您的类被注解为无状态。这是对框架的滥用。