尝试缓存时用尽了结果集

时间:2019-04-30 15:22:45

标签: java spring oracle memcached openjpa

我还有下一个例外

Caused by: <openjpa-2.4.0-r422266:1674604 fatal general error> org.apache.openjpa.persistence.PersistenceException: Exhausted Resultset

使用该代码时

@PersistenceContext
protected EntityManager em;


@Override
@TransactionalRollback
public void updateContractor(Coupons coupon) {
    cacheWorker(() -> {
        em.merge(coupon);
        return null;
    }, coupon, new String[]{String.valueOf(coupon.getId().getContractorId()), coupon.getId().getCouponId()});
}


 public <T> T cacheWorker(Supplier<T> supplier, Object object, String[] keyLine) {
        if (useCache) {
            String key = ParseUtils.collectToKeyWithDot(CACHE_DAO_PREFIX + keyLine);
            T value = select(key);
            if (object == null && value == null) {//For first Select
                value = supplier.get();
                addCache(key, value);
            } else if (object == null && value != null) { //For every repeated Select 
              return value;
            } else if (object.equals(value) && value != null) {// For INSERT/UPDATE, and DELETE (which doesn't handle here)
                return value;
            } else if (!object.equals(value) && value != null) {// For UPDATE, and DELETE (which doesn't handle here)
                update(supplier, object, key);
                value = getCache(key);
            } else if (!object.equals(value) && value == null) {//For INSERT, and DELETE (which doesn't handle here)
                insert(supplier, object, key);
                value = getCache(key);
            }
            return value;
        } else {
            return supplier.get();
        }
    }

实际上,我在这里已经阅读了很多有关该错误的问题,但是到处都在使用rs.next();,但在这里我还没有看到。 我只有EntityManager

我不知道为什么会发生此问题,但是假设由于em.merge(coupon);在送给供应商时执行,不是吗?

UPD

有时效果很好,但有时会导致异常。

0 个答案:

没有答案