在时间戳上使用Hibernate Restrictions.ilike()

时间:2013-01-08 21:44:34

标签: java sql spring hibernate jqgrid

我一直在思考它,我开始怀疑这是否可能。

用户视角: 有一个数据表,一列包含日期。用户可以输入搜索字词dec,并获取12月期间发生的所有行。

后端:jqGrid用于显示表格。它将输入的搜索词发送到服务器。服务器使用代码

Criteria cr = session.createCriteria( DetailedLogEntry.class );
Disjunction disjunction = Restrictions.disjunction();
MatchMode matchMode = MatchMode.ANYWHERE;
disjunction.add( Restrictions.ilike( searchKey.getField(), searchKey.getData(), matchMode ) );
cr.add( disjunction );

应用搜索字词,DetailedLogEntry包含Date变量以表示数据库的TIMESTAMP字段。

因为searchKey.getData()返回一个字符串,将它与日期对象进行比较会产生一个空集。

所以我想问题是 ...是否可以通过Hibernate对Date对象应用限制,就像它是一个字符串一样?

1 个答案:

答案 0 :(得分:0)

那是不可能的。您需要使用Restrictions.between()并为其指定上下日期值。您可以使用SimpleDateFormatString值转换为Date值,然后执行搜索?

如果用户搜索了Dec,您是否希望每年12月的所有日志条目都显示出来?他们可以输入:“1月12日”,并期望每年12月1日看到所有日志?如果它是您正在寻找的日期的字符串匹配,可能更容易将所有数据加载到您的jqGrid并使用javascript根据字符串格式的日期值过滤表。