2015-08-10 3 views
1

Я пытаюсь получить набор записей, которые встречаются в диапазоне дат, предоставленных пользователем. По какой-то причине критерии не возвращают никаких результатов, даже если есть записи, которые должны совпадать.Критерий спящего режима - сравнение даты не возвращает правильные результаты

Свойство модели и выборки данных:

@Column(name="date") 
private Date date; 

mysql> select * from student_interaction where id = X \G 
*************************** 1. row *************************** 
       id: 23828 
       date: 2015-08-07 00:00:00 
       student_id: 2725 
       ... other columns ommitted 
1 row in set (0.01 sec) 

реализация Критерии:

List<StudentInteraction> returnList = new ArrayList<StudentInteraction>(); 
    Criteria criteria = session.createCriteria(StudentInteraction.class); 
    if(userID > 0) { 
     List<Number> criteriaInList = new ArrayList<Number>(); 
     criteriaInList = session.createSQLQuery("select student_id from advisor_student where advisor_id = :userID").setInteger("userID", userID).list(); 
     if(criteriaInList != null && criteriaInList.size() > 0) { 
      criteria.add(Restrictions.in("student.id", criteriaInList)); 
     } 
    } 
    criteria.add(Restrictions.ge("date", startDate)); 
    criteria.add(Restrictions.lt("date", endDate)); 
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
    returnList = criteria.list(); 
    return returnList; 

Значения параметров:

  • STARTDATE: ср 15 августа 00:00:00 PST 14 (Дата)
  • endDate: Чт авг. 15 00:00:00 PST 15 (Дата)
  • criteriaInList: (1521, 1840, 1852, 1914, 5431, 10748, 29017, 8056, , 5505)

Как вы можете видеть, дата ЗАПИСИ падает в поставленном STARTDATE и endDate, а значение student_id записи содержится в критерияхInList. Кто-нибудь есть идея, почему returnList выходит [] (пустой)?

+0

Не могли бы вы сначала проверить с помощью жесткого кодирования 'id'? В вашем 'criteria.add (Restrictions.in (" student.id ", критерииInList))' replace 'criteriaInList' для' new String [] {"2725"} 'и посмотреть, что получится –

+0

Во-первых, спасибо за ваш комментарий. Тем не менее, я получаю тот же результат, используя жесткий список. Проблема, по-видимому, не зависит от ограничения критериевInList, потому что даже когда она никогда не входит в условие (userID> 0), результат остается пустым. – rawkfist0215

ответ

0

Вы пытались запустить сгенерированный sql с значениями параметров непосредственно в базе данных? Значения даты начала и окончания GE и LT удовлетворяют запросу?

Вы можете просто начать с устранения условий и критериев даты начала и окончания и продолжать добавлять один-один критерий одновременно.

+0

По вашему предложению я добавил только '' criteria.add (Restrictions.ge ("date", startDate)); '' ограничение. Он возвращает все записи StudentInteraction независимо от того, является ли свойство * date * значением GE, чем параметр startDate. Любые идеи, почему это было бы? – rawkfist0215

+0

Как насчет sql, сгенерированного из критериев? Это также приводит все записи? – Mihir

Смежные вопросы