Я использую JAVA JPA Criteria Builder, чтобы проверить, существует ли дата между двумя датами или нет. Я передаю дату в функцию, которая имеет запрос в таблице, и эта таблица имеет два столбца дат. Теперь я хочу проверить дату, через которую я прошел между двумя или нет.
private CorpClientsCommRateD getCorpClientsCommRateD(Date date) {
CorpClientsCommRateD commissionRate=null;
try {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<CorpClientsCommRateD> query = builder.createQuery(CorpClientsCommRateD.class);
Root<CorpClientsCommRateD> root = query.from(CorpClientsCommRateD.class);
List<Predicate> conditions = new ArrayList();
conditions.add(builder.between(date,root.get("effFromDate"),root.get("effToDate")));
query.select(root)
.where(conditions.toArray(new Predicate[]{}));
TypedQuery<CorpClientsCommRateD> commissionRates = em.createQuery(query);
commissionRate=commissionRates.getSingleResult();
}
catch(Exception exp)
{
return commissionRate;
}
return commissionRate;
}
Я получаю сообщение об ошибке Ошибка: (148, 35) java: не найдено подходящего метода между (java.util.Date, javax.persistence.criteria.Path, javax.persistence.criteria.Path)
Просьба помочь
Ваш первый аргумент between
передается как литерал Java, поэтому для использования в Criteria вам необходимо преобразовать его в параметр запроса
builder.parameter(Date.class, "mydate")
или преобразовать его в литерал Критерии.
builder.literal(date)
Но тогда вы могли бы получить это, просто посмотрев на javadocs для этого метода и разработав, как получить критерий "Expression",
root.get("effFromDate")
чтобы явно привести тип кroot.<Date>get("effFromDate")
для обоих входов