Я использовал Hibernate
в моем REST API для работы с базой данных. У меня в основном 3 слоя;Спящий режим: нет результатов при запуске запроса для получения результатов между диапазоном дат
- JSON Service Layer - Это будет обрабатывать JSON запросов
- Service Layer - Это будет обрабатывать любые операции для данных, передаваемых или принимаемых от слоя базы данных
- Database Layer - Работает с базой данных. Функции для сохранений, обновления и т.д.
Пожалуйста, проверьте код ниже
JSON Service Layer
@GET
@Path("/getByTimeRange/{fromDate}/{toDate}")
@Produces(MediaType.APPLICATION_JSON)
public List<Measurements> getByTimeRange(@PathParam("fromDate") String fromDate, @PathParam("toDate") String toDate)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
MeasurementsService measurementsService = new MeasurementsService();
List<Measurements> byTimeRange = null;
try {
byTimeRange = measurementsService.getByTimeRange(sdf.parse(fromDate), sdf.parse(toDate));
} catch (ParseException ex) {
Logger.getLogger(MeasurementsJSONService.class.getName()).log(Level.SEVERE, null, ex);
}
return byTimeRange;
}
Service Layer
public List<Measurements> getByTimeRange(Date fromDate, Date toDate)
{
Session session = measurementsDAOInterface.openCurrentSession();
Transaction transaction = null;
List<Measurements> byTimeRange = null;
try
{
transaction = measurementsDAOInterface.openTransaction(session);
byTimeRange = measurementsDAOInterface.getByTimeRange(fromDate, toDate, session);
transaction.commit();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
session.close();
}
return byTimeRange;
}
Database Layer
public List<Measurements> getByTimeRange(Date fromDate, Date toDate, Session session)
{
Query query = session.createQuery("FROM Units where last_updated BETWEEN :fromDate and :toDate");
query.setParameter("fromDate", fromDate);
query.setParameter("toDate", toDate);
List<Measurements> list = query.list();
System.out.println("Size "+list.size());
System.out.println("Dates "+toDate +" : "+ fromDate);
for(int i=0;i<list.size();i++)
{
System.out.println("Item: "+list.get(i).getLastUpdated());
}
return list;
}
Поэтому в основном то, что я пытаюсь сделать, это получение наборов данных относятся к определенному диапазону дат - Давайте скажем, между 14-02-2016 до 14-09-2016. В Hibernate
, я использовал код ниже
FROM Units where last_updated BETWEEN :fromDate and :toDate
Units
является таблицей и last_updated
этого имя столбца.
В любом случае, я всегда получаю никаких результатов, просто пробел. Даже код System.out.println("Size "+list.size());
внутри слоя базы данных печатает 0
.
Что здесь не так?
Благодарим вас за ответ. «ast_updated» - это имя столбца. В классе «Единицы» это «lastUpdated». В любом случае, я все в моих прежних запросах использовал эти имена столбцов. –
Думаю, я нашел случай. Я звоню в неправильный стол! Но позвольте мне проверить. –
Да, это проблема. Неверное имя таблицы. Большое вам спасибо за поддержку.Я нашел ошибку, когда вы специально задали вопрос о 'last_updated' в таблице' Units'. +1 от меня. –