【问题标题】:clear() and flush() not working in JPA/EclipseLinkclear() 和 flush() 在 JPA/EclipseLink 中不起作用
【发布时间】:2016-06-03 11:41:12
【问题描述】:

我只是想清除我的实体管理器的持久性上下文以重新加载数据库中的所有数据,特别是在该方法中:

public MyEntity find(Object id) {
    EntityManager em = getEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    em.flush();
    tx.commit();
    em.clear();
    return em.find(MyEntity .class, id);
}

但似乎flush() 无法正常工作,因为当我插入OtherEntity 并执行该方法时,我没有通过getCollection() 方法在持久性上下文中找到它(仅在重新启动我的应用程序后)..

【问题讨论】:

  • em.flush 在提交之前完全没有意义......提交会刷新。您的交易没有在其中执行任何操作,因此这也是完全没有意义的。因此,如果您想调试问题,请查看日志。我在您发布的代码中看不到 getCollection(无论 getCollection 是什么)

标签: java jpa eclipselink


【解决方案1】:

我找到了答案:

@Override
public MyEntity find(Object id) {
    EntityManager em = getEntityManager();
    MyEntity ps = em.find(MyEntity .class, id);
    em.refresh(ps);
    return ps;
}

【讨论】:

  • 这意味着您没有维护双向关系的双方。当您进行更改时,您需要更新双方,否则它们会变得不同步,从而降低缓存的价值。如果您在 JPA 之外进行更改并希望清除二级缓存,请参阅 stackoverflow.com/questions/13258976/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
相关资源
最近更新 更多