JPA缓存未失效

时间:2014-06-13 09:00:32

标签: 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();

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

entityManager.getEntityManagerFactory()getCache()evictAll()。;正在清除共享缓存,而eclipselink.cache.shared.default“value =”false“也会影响共享缓存。共享缓存也称为二级缓存 - 第一个是EntityManager本身用于跟踪的缓存由于您使用单个EntityManager来处理所有内容,因此所有内容都放在第一级缓存中。

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