我还有下一个例外
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
有时效果很好,但有时会导致异常。