【问题标题】:Hibernate JPA 2.1 aware of manual DB changesHibernate JPA 2.1 意识到手动数据库更改
【发布时间】:2015-10-08 21:55:35
【问题描述】:

我正在使用 Hibernate JPA 2.1 和 swing 应用程序。我的数据库是 MySQL。同一个数据库可以从另一个 apring jpa 应用程序更新,该应用程序与我的应用程序没有连接。我的问题是我的摇摆应用程序总是给我旧实体。如何配置它以感知数据库外部变化。

如果有人解决了这个问题,我会非常有帮助。

感谢大家的观看和回答。

【问题讨论】:

  • 您需要在您的应用程序中禁用缓存。如果你手动缓存任何东西,你也需要停止这样做:)。 Hibernate 通常使用 EhCache,因此安全检查是您是否有任何 ehcache 配置并将其删除。这个问题可能会给你另一种选择(使用无状态会话):stackoverflow.com/questions/3827704/…
  • 或者您只是在使用一个 Session 并使其永远保持打开状态。不要那样做。每次需要访问数据库时,打开一个新会话并启动一个新事务。

标签: hibernate jpa


【解决方案1】:

您需要清除会话缓存:

@PersistenceContext
private EntityManager em;
void beforeQuery() {
    Session session = em.unwrap(Session.class);
    session.clear();
}

【讨论】:

    【解决方案2】:

    刷新方法应该可以完成这项工作:

    @PersistenceContext
    private EntityManager em;
    void refresh(MyEntity myEntity) {
        em.refresh(myEntity);
    }
    

    有关刷新的更多信息: https://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#refresh(java.lang.Object)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2019-05-27
      • 2018-11-26
      • 1970-01-01
      相关资源
      最近更新 更多