Hibernate查询搜索条件按时间戳过滤

时间:2017-07-14 08:23:51

标签: java sql hibernate date casting

美好的一天,

我有一个db2数据库,我有一个SQL查询如下:

select * FROM SCORPORATEREGISTEREDACCOUNTS CRA   WHERE cra.corporateRegisteredAccountId = 241 
and cra.paymentDate >= '2017-07-07 00:00:00' and cra.paymentDate <= '2017-07-07 23:59:59';

在我的数据库中,行记录有paymentDate =&#39; 2017-07-07 11:48:00&#39;。此paymentDate列的数据类型设置为TIMESTAMP

当我通过命令或dbVisualizer运行此查询时,我可以正确地获得结果。

然而,当使用Hibernate Query通过java代码运行此查询时,我会得到一些奇怪的结果,这是第一次获得空记录,并且在第二次及以后记录,如果我记录从我的java Web应用程序中退出并再次登录,会出现同样的问题。

以下是我通过搜索按钮触发的示例代码:

StringBuilder sb = new StringBuilder( );
sb.append( " \\ my query here " );
Query query = getSession( ).createSQLQuery( sb.toString( ) );
return query.list();

换句话说,我必须第二次按下搜索按钮才能得到正确的结果。

以下是我的一些测试用例:

  1. 如果我将行记录paymentDate更改为&#39; 2017-07-07 00:00:00&#39;,则不会有搜索问题。

  2. 如果我在2天而不是1天内将我的sql查询更改为搜索,那么它也不会有问题。

    其中cra.paymentDate&gt; =&#39; 2017-07-07 00:00:00&#39;和cra.paymentDate&lt; =&#39; 2017-07-07 23:59:59&#39;

  3. 或者我更改了我的代码以调用query.list()2次(仅在第二次返回):

    query.list(); return query.list();

  4. 但是,我的解决方案是将列投射到目前为止:

    where date(cra.paymentDate) >= '2017-07-07 00:00:00' and date(cra.paymentDate) <= '2017-07-07 23:59:59'
    

    我的问题是,为什么原始查询第一次不起作用,只能第二次工作。如果认为是逻辑,它应该满足搜索条件并返回正确的结果。它是Hibernate Query错误吗?或者我的代码还有其他原因或错误。

    请告知。

0 个答案:

没有答案