美好的一天,
我有一个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();
换句话说,我必须第二次按下搜索按钮才能得到正确的结果。
以下是我的一些测试用例:
如果我将行记录paymentDate更改为&#39; 2017-07-07 00:00:00&#39;,则不会有搜索问题。
如果我在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;
或者我更改了我的代码以调用query.list()2次(仅在第二次返回):
query.list(); return query.list();
但是,我的解决方案是将列投射到目前为止:
where date(cra.paymentDate) >= '2017-07-07 00:00:00' and date(cra.paymentDate) <= '2017-07-07 23:59:59'
我的问题是,为什么原始查询第一次不起作用,只能第二次工作。如果认为是逻辑,它应该满足搜索条件并返回正确的结果。它是Hibernate Query
错误吗?或者我的代码还有其他原因或错误。
请告知。