请帮助我解决这个问题。我目前正在使用spring数据JPA在spring boot应用程序中工作,并使用QueryDSL检索结果,并且尝试在此处应用ehcache概念。
@CachePut(value = "ticketsearchcache",key = "#result.toString()",condition = "#result != null")
public Person savePerson(Person p) throws Exception {
Person test= serviceRequestRepository.save(p);
return test;
}
并检索我正在使用查询dsl以及在此处应用可缓存的结果。
@Cacheable(value = "ticketsearchcache",key = "#srchCriteriactx.toString()")
public List<Person> findByServiceRequestNumberAndDivisionAndDateCreated(SearchCriteriaContext srchCriteriactx) throws ParseException {
QServiceRequest sr = QServiceRequest.serviceRequest;
queryFactory = new JPAQueryFactory(em);
BooleanBuilder where = new BooleanBuilder();
List<Tuple> serReqList = new ArrayList<>();
OrderSpecifier<Date> specifier = sr.dateCreated.desc();
serReqList = queryFactory
.select(sr.serviceRequestNumber,sr.dateCreated,sr.serialNumber,sr.trackingNumber)
.from(sr).leftJoin(sr.pc,pc).leftJoin(sr.printer,printer).leftJoin(sr.storeclosing,storeclosing).where(where)
.orderBy(specifier).fetch();
List<Person > searchResults = new ArrayList<Person >();
for (Tuple row : serReqList) {
Person result = new Person ();
result.setServiceRequestNumber(row.get(0,String.class));
result.setDateCreated(row.get(1,Date.class));
result.setSerialNumber(row.get(2,String.class));
result.setTrackingNumber(row.get(3,String.class));
searchResults.add(result);
}
return searchResults;
}
当我这样做时,cacheput根本无法正常工作,在其他情况下,它引发的classcast异常无法像这样强制转换为列表。任何建议将不胜感激。