java - 如何将我的 Web 应用程序同步到我的数据库?

标签 java database jakarta-ee jpa jpa-2.0

我有一个 Java Web 应用程序,并且正在通过 JPA2 (EclipseLink) 访问 Oracle 11g 数据库

现在必须对存储的数据进行一些更改,但我的应用程序仍在缓存旧值。

问题:如何强制我的应用程序删除整个缓存并从数据库重新加载数据(在应用程序运行时)?

我尝试了以下方法,但似乎没有效果:

@ManagedBean
@SessionScoped
public class CacheEvictall implements Serializable {
    // (...)

    public void evictDatabaseCache() {
        // clear persistence cache
        EntityManager em = emf.createEntityManager();

        if (em != null) {
            LOGGER.info("Evicting database cache!");
            try {
                utx.begin();
                emf.getCache().evict(FooClass.class);
                emf.getCache().evict(BarClass.class);
                // or: emf.getCache().evictAll();
                em.flush();
                utx.commit();
            } catch (Exception e) {                
                e.printStackTrace();
            }
        } else {
            LOGGER.log(Level.WARNING, "No EntityManager! Cannot evict cache!");
        }
    }
}

我什至重新启动了应用程序服务器(Glassfish v3.1.2)并重新部署了应用程序本身,但效果相同:没有任何反应。

提前谢谢您 范特

最佳答案

evict 将使缓存失效并确保下一个查询从数据库返回数据。

如果您重新启动应用程序服务器,但仍然没有看到更改,那么我猜测您没有更改数据。检查您是否提交了事务,并检查您是否正在更新正确的数据库。还要确保您不会在启动时删除并重新创建表。

关于java - 如何将我的 Web 应用程序同步到我的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817817/

上一篇:java - MongoDB 和管理 UI

下一篇:java异常

相关文章:

java - 如何从谷歌搜索中获取前 5 个链接的列表?

java - 替换java中的分号(;)字符

database - 在数据库中存储图像——是还是不是?

database - 如何在 JULIA 中使用 writecsv/writedlm 写入带标题的输出

Python Cubes OLAP Framework - 如何使用连接?

java - Enum StandardOpenOption 的哪些组合是被禁止的?

java - jFrame新线程

css - 如何使用 CSS 填充设置 primefaces 数据表列填充

java - 是否有为 Java EE 容器定义 JDBC 数据源的标准方法?

java - org.apache.axis2.AxisFault : First Element must contain the local name, 信封,但找到了 html