我在REST API中使用Hibernate
来完成数据库工作。我基本上有3层;
请检查以下代码
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
。
这里有什么问题?
答案 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