java - JPA缓存未失效

标签 java mysql caching jpa eclipselink

我正在使用 Eclipse IDE、EclipseLink、JPA 和 MySQL 开发应用程序。在应用程序的初始启动期间,我需要删除表格的内容。但是,删除应用程序后,建立新连接,仍然会从空表中读取旧数据。 我最初的方法是在每次执行操作时创建一个 new EntityManager

    private EntityManager entityManager;

    public FacadeFactory() {
        entityManager = DBConnection.connect();
    }

关闭JPA缓存后,问题解决。

由于性能问题,EntityManager 已更改为 Singleton,以便只打开一个到数据库的连接。

    private static FacadeFactory instance;
    private EntityManager entityManager;

    private FacadeFactory() {
        entityManager = DBConnection.connect();
    }

    public static FacadeFactory getInstance(){
        if(instance == null){
            instance = new FacadeFactory();
        }
        return instance;
    }

现在,即使缓存仍然被禁用,我也遇到了和以前一样的问题。我尝试从 persistence.xml 和代码中禁用缓存,但它们都不适合我。

<property name="eclipselink.cache.shared.default" value="false"/>
entityManager.getEntityManagerFactory().getCache().evictAll();

谁能帮帮我?

最佳答案

entityManager.getEntityManagerFactory().getCache().evictAll();正在清除共享缓存,而 eclipselink.cache.shared.default"value="false"也会影响共享缓存。共享缓存也称为二级缓存——第一级是 EntityManager 本身用于跟踪的缓存托管实体。因为您对所有内容都使用单个 EntityManager,所以所有内容都会放入第一级缓存中。

您可以根据需要创建一个新的 EntityManager,或者您可以偶尔调用 em.clear() 来清除 EntityManager 中的缓存 - 分离您的实体。

关于java - JPA缓存未失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201485/

相关文章:

sql - 重写 mysql select 以减少时间并将 tmp 写入磁盘

java - 尝试连接mysql数据库

java - 添加两个类扩展它的抽象类的最佳方法?

java - 无法配置 spring boot 安全 - 总是 403

php - 如何从本地数据库(mysql)获取上传的图像到android?

php - 动态缩小 CSS : leveraging browser caching

javascript - 使用 Service Worker 进行缓存

java - 从 Guava RemovalListener 重新插入条目是否安全?

java - 如何使用 java 检查数据库连接是关闭还是打开?

java - 使用Java在谷歌应用程序引擎上逐像素读取和修改图像,几乎就在那里