Eclipselink:使用ReadAllQuery时清除缓存

时间:2015-11-11 12:29:52

标签: jpa eclipselink

我无法清除缓存。

我有一个简单的ReadAllQuery。

    Session session = ((EntityManagerImpl) em).getActiveSession();

    ReadAllQuery query = new ReadAllQuery(Customer.class);
    query.setFetchSize(100);

    query.useScrollableCursor();

    ScrollableCursor cursor = (ScrollableCursor) session.executeQuery(query);


    int count = 0;
    while (cursor.hasNext()) {
        Customer customer = (Customer) cursor.next();
        if (++count > 0 && count % 100 == 0) {
            System.out.println("Fetched " + count + " entities");
            em.getEntityManagerFactory().getCache().evictAll();
        }
    }

我也尝试过使用em.clear()

        <property name="eclipselink.cache.shared.default" value="false"/>
        <property name="eclipselink.query-results-cache" value="false"/>
在persistence.xml中

但堆空间不断增长。 如何清除实体?

谢谢

1 个答案:

答案 0 :(得分:1)

请使用:

em.createNamedQuery("findAll").setHint(QueryHints.CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS).getResultList();

正如您在BYPASS枚举的javadoc中看到的那样:

  

绕过缓存:直接从数据库中获取数据。