0

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

用户视角:有一个数据表,其中一列包含一个日期。用户可以输入搜索词,例如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对象应用一个限制,就好像它是一个字符串一样?

4

1 回答 1

0

那是不可能的。您需要使用Restrictions.between()并给它一个上限和下限日期值。您可以使用SimpleDateFormat将您的String值转换为Date值,然后执行搜索?

如果用户搜索 12 月,您会希望显示每年 12 月的所有日志条目吗?他们可以输入 :"1, Dec" 并期望看到每年 12 月 1 日的所有日志吗?如果它是您要查找的日期的字符串匹配,则将所有数据加载到您的 jqGrid 中并使用 javascript 根据字符串格式的日期值过滤表可能会更容易。

于 2013-01-08T21:55:26.090 回答