2016-12-14 1 views
0

Я использовал Hibernate в моем REST API для работы с базой данных. У меня в основном 3 слоя;Спящий режим: нет результатов при запуске запроса для получения результатов между диапазоном дат

  1. JSON Service Layer - Это будет обрабатывать JSON запросов
  2. Service Layer - Это будет обрабатывать любые операции для данных, передаваемых или принимаемых от слоя базы данных
  3. 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.

Что здесь не так?

ответ

1

Можете ли вы поместить здесь класс единиц?
У вас есть член в Units с last_updated name?
У вас есть данные в базе данных?
Если вы запускаете обычный SQL-запрос в базе данных, он имеет какие-либо результаты?

Здесь я даю вам пример Между датами.

@Override 
public List<Auto> getAutosFechaVenta(Calendar fechaDesde, Calendar fechaHasta) { 

    EntityManager em = null; 
    List<Auto> listaAutos = null; 

    try { 
     em = emf.createEntityManager(); 
     em.getTransaction().begin(); 
     String autosFechabetween = "from Auto a where fechaVenta between :desde and :hasta "; 
     Query query = em.createQuery(autosFechabetween); 
     query.setParameter("desde", fechaDesde); 
     query.setParameter("hasta", fechaHasta); 

     listaAutos = query.getResultList(); 

    } catch (Exception e) { 
    } finally { 
     try { 
      if (em != null) { 
       em.close(); 
      } 
     } catch (Exception e) { 
     } 

    } 
    return listaAutos; 
} 

Когда вы начинаете сделку? См. Мой код: em.getTransaction(). Begin();

Возможно, вы можете попробовать с query.getResultList();

Надеюсь, этот пример поможет вам. Позвольте мне узнать ваши результаты.

+0

Благодарим вас за ответ. «ast_updated» - это имя столбца. В классе «Единицы» это «lastUpdated». В любом случае, я все в моих прежних запросах использовал эти имена столбцов. –

+0

Думаю, я нашел случай. Я звоню в неправильный стол! Но позвольте мне проверить. –

+0

Да, это проблема. Неверное имя таблицы. Большое вам спасибо за поддержку.Я нашел ошибку, когда вы специально задали вопрос о 'last_updated' в таблице' Units'. +1 от меня. –

0

Проблема в том, что я использовал неправильное имя таблицы в моем запросе. Это должно быть FROM Measurements where last_updated BETWEEN :fromDate and :toDate

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