Hibernate:运行查询以获取日期范围之间的结果时没有结果

时间:2016-12-14 12:54:56

标签: java mysql json hibernate rest

我在REST API中使用Hibernate来完成数据库工作。我基本上有3层;

  1. JSON服务层 - 这将处理JSON请求
  2. 服务层 - 这将处理从数据库层发送或获取的数据的任何操作
  3. 数据库层 - 与数据库一起使用。保存,更新等功能
  4. 请检查以下代码

    JSON服务层

    @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;
        }
    

    服务层

    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;
        }
    

    数据库层

    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;
        }
    

    所以基本上我要做的是检索属于特定日期范围的数据集 - 假设在2016年2月14日到2016年9月14日之间。在Hibernate中,我使用了以下代码

    FROM Units where last_updated BETWEEN :fromDate and :toDate
    

    Units是表格,last_updated是列的名称。

    无论如何,我总是得不到任何结果,只是空白。甚至数据库层中的代码System.out.println("Size "+list.size() );也会打印0

    这里有什么问题?

2 个答案:

答案 0 :(得分:1)

你能把Units课程放在这里吗?
您是否拥有last_updated名称的单位成员?
你有dataBase中的数据吗?
如果在数据库中运行正常的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()开头();

也许您可以尝试使用query.getResultList();

我希望这个例子可以帮助你。让我知道你的结果。

答案 1 :(得分:0)

问题是我在查询中使用了不正确的表名。它应该是FROM Measurements where last_updated BETWEEN :fromDate and :toDate