当前位置: 首页 > 面试题库 >

如何使用休眠中的between子句比较日期

施文彬
2023-03-14
问题内容

我想获取介于两个时间戳之间的记录。我想要使​​用hibernate模式。我尝试使用以下查询进行操作,但未获得任何输出

HQL = "From AddressInfo address where address.addressId = '"+newValues.get("pickupAddress").toString()+"' and address.updatedDateAndTime between date_format('" + DateUtility.getTimeOfBeforeOneMinute() + "', '%m/%d/%y %H:%i:%s') and date_format('"+DateUtility.getCurrentDate()+"','%m/%d/%y %H:%i:%s')";

这是从控制台形成的SQL查询:

select addressinf0_.T_ADM_NPK_ADDRESS_ID as T1_5_, addressinf0_.T_ADM_VNM_USER_ID as T2_5_, addressinf0_.T_ADM_FPK_USER_ASSIGNED_ID as T3_5_, addressinf0_.T_ADM_VNM_STREET_1 as T4_5_, addressinf0_.T_ADM_VNM_STREET_2 as T5_5_, addressinf0_.T_ADM_VNM_STREET_3 as T6_5_, addressinf0_.T_ADM_VNM_CITY as T7_5_, addressinf0_.T_ADM_VNM_STATE as T8_5_, addressinf0_.T_ADM_VNM_ZIPCODE as T9_5_, addressinf0_.T_ADM_DNM_LATITUDE as T10_5_, addressinf0_.T_ADM_DNM_LONGITUDE as T11_5_, addressinf0_.T_ADM_TNM_CREATE_DATETIME as T12_5_, addressinf0_.T_ADM_TNM_UPDATE_DATETIME as T13_5_ from t_address_master addressinf0_ where addressinf0_.T_ADM_NPK_ADDRESS_ID='19' and (addressinf0_.T_ADM_TNM_UPDATE_DATETIME between date_format('Tue Oct 02 17:09:53 EDT 2012', '%m/%d/%y %H:%i:%s') and date_format('Tue Oct 02 17:10:53 EDT 2012', '%m/%d/%y %H:%i:%s'))

我的数据库具有T_ADM_TNM_UPDATE_DATETIME = 10/2/2012 5:10:40 PM的记录

但是结果集无法获取此查询…我不知道我哪里出错了。

谁能指导我进一步


问题答案:

您应该使用HQL参数而不是串联。

举个例子:

Map<String, Object> parameterNameAndValues = new HashMap<String, Object>();

Date startDate;
Date endDate;

// Assign values to startDate and endDate

parameterNameAndValues.put("startDate", startDate);
parameterNameAndValues.put("endDate", endDate);

String hqlQuery = "FROM EntityName WHERE fechaInicio BETWEEN :startDate AND :endDate";

Query query = this.sessionFactory.getCurrentSession().createQuery(hqlQuery);

for (Entry<String, Object> e : parameterNameAndValues.entrySet()) {
    query.setParameter(e.getKey(), e.getValue());
}

return query.list();

这将绑定日期参数,并且hibernate将为您进行必要的转换,以避免完整性检查和错误。请记住,即使MySQL以这种格式保存Date对象,其他数据库也可能不会保存,它将破坏Hibernate帮助。



 类似资料:
  • 问题内容: 在我的数据库日期中,如 ,等等,我需要检索在日期字段中具有当前日期的数据。我的意思是我只需要比赛。我该如何使用hibernate条件。 问题答案: 使用Restrictions.between()生成一个where子句,该子句的日期列在‘2012-04-09 00:00:00’和‘2012-04-09 23:59:59’之间 请注意,Criteria API中使用的所有属性都是Java

  • 问题内容: 对于新产品的重新设计,我们正在从Java中选择最佳框架。由于考虑使用模型的数据库不可知方法,因此我们正在研究Struts +Spring与iBATIS或Hibernate之间的选项。请提供最好的建议,因为两者都可以提供持久性。 问题答案: Ibatis和Hibernate是完全不同的野兽。 我倾向于这样看:如果您的视图以 对象为中心, 则Hibernate会更好地工作。但是,如果您认为

  • 问题内容: 使用Java,hibernate。 我有一个查询 我无法使用上面的代码将此参数绑定到pixIds。什么是正确的方法? 注意:这里的查询是我的实际查询的简化版本。 问题答案: 以下方法适用于 公共查询setParameterList(String name,Collection vals)引发HibernateException

  • 问题内容: 我试图建立一个查询,其中基于用户选择从客户端发送一些字段。我计划根据用户的选择创建一个动态查询。尽管我可以简单地用一些Java代码来完成它,并且让hibernate为我激发该查询并返回结果。 我的问题是,我可以使用内置hibernate机制来做同样的事情。例如我会得到一张地图说 唯一的区别是地图可以包含的值的数量,并基于此我想创建一个查询 提前致谢 问题答案: 通过使用条件,这应该不成

  • 问题内容: 我们正在将JPA与hibernate用作提供程序,我们有一个查询,该查询包含一个与FROM子句中的子查询的联接,但是会出现以下错误: org.hibernate.hql.ast.QuerySyntaxException:意外令牌:(在第1行第75列附近[SELECT sd from com.hp.amber.datamodel.entities.analysis.SnapshotDat

  • 问题内容: 考虑以下两个表: 表A中的每条记录都精确映射到表B中的1条记录。这意味着表B没有重叠的时间段。表A中的许多记录可以映射到表B中的同一记录。 我需要一个返回所有A.id,B.id对的查询。就像是: 我正在使用MySQL,但无法优化此查询。表A中有约980条记录,表B中有130.000条记录,这是永远的事。我知道必须执行980个查询,但是在功能强大的计算机上花费超过15分钟的时间却很奇怪。