我正在使用Criteria API来创建通常不使用PK作为标识符的查询。我无法强制eclipselink存储结果缓存。
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Book> criteriaQuery = builder.createQuery(MetadataTextValue.class);
Root<Book> root = criteriaQuery.from(MetadataTextValue.class);
criteriaQuery = criteriaQuery.where(builder.equal(root.get("value"),value.getValue()));
TypedQuery<Book> typedQuery = em.createQuery(criteriaQuery);
MetadataTextValue metadataTextValue = typedQuery.getSingleResult();
但它适用于:
Query query = entityManager.createQuery("select m from MetadataTextValue m where m.value = :value");
query.setParameter("value",value.getValue());
return (MetadataTextValue)query.getSingleResult();
因此实体和价值本身不应该存在问题。我尝试调试Eclipselink搜索,并在使用条件API时,在第一次缓存未命中结果添加到缓存后,但下次搜索相同值时再次缓存未命中,但未添加。