Я использую JPA 2 с Hibernate, чтобы построить запрос, который на всю жизнь меня не будет работать корректно. Запрос ниже:CriteriaQuery JPA 2 проблема с результатами
public Integer getCountForDAR(Date _SD, Date _ED, Integer _PostId, String _Filter) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(TcDarActivities.class);
Root fromTcDarActivities = cq.from(TcDarActivities.class);
Path typePath = fromTcDarActivities.get(BaseDao.TC_DAR_ACTIVITY_TYPE).get(BaseDao.TYPE_NAME);
Path postPath = fromTcDarActivities.get(BaseDao.TC_POST).get(BaseDao.POST_ID);
cq.select(fromTcDarActivities).where(
cb.and(cb.between(fromTcDarActivities.get(BaseDao.DARACTIVITY_TIME), _SD, _ED),
cb.equal(postPath, _PostId),
cb.or(
cb.like(fromTcDarActivities.get(BaseDao.COMMENTS), _Filter),
cb.like(typePath, _Filter)
)));
TypedQuery tq = getEm().createQuery(cq);
LOGGER.info(tq.unwrap(org.hibernate.Query.class).getQueryString());
try
{
List<TcDarActivities> list = getEm().createQuery(cq).setHint("javax.persistence.cache.retrieveMode", CacheRetrieveMode.BYPASS).getResultList();
return list.size();
}
catch(Exception e) { return 0; }
}
Поле TC_DAR_ACTIVITY_TYPE может быть пустым в базе данных. Проблема заключается в том, что запрос возвращает результаты только в том случае, если значения TC_DAR_ACTIVITY_TYPE и COMMENTS имеют значения в диапазоне дат. Может кто-то может помочь здесь. Я растрескивание голову на это, потому что я абсолютно уверен, что я делаю это правильно ...
Благодаря Вессель
Возможно, описание того, что должен сделать ваш запрос *, и что ваш запрос будет * вместо этого, может помочь? Можете ли вы показать нам SQL, который он производит? Когда вы запускаете SQL в инструменте, какие условия вы можете удалить/исправить, чтобы дать правильные результаты? –
Когда вы говорите: «Запрос возвращает результаты, если TC_DAR_ACTIVITY_TYPE и COMMENTS имеют значения в диапазоне дат», как ACTIVITY_TYPE имеет диапазон дат? –
Ваш код был бы читабельным, если бы у вас не было всех уродливых префиксов на все. ACTIVITY, COMMENT, ACTIVITY_TYPE сделает читаемый код, который вы и другие люди могли бы понять. Отформатируйте свой код - особенно - лучше. Если он не может быть ясно прочитан, его нельзя понять ясно. Первый шаг в отладке, capiche? –