Oracle数据库上的JPA本机查询

Oracle数据库上的JPA本机查询,oracle,jpa,Oracle,Jpa,我试图在Oracle数据库上执行一个包含日期的本机查询,但我没有得到任何结果 我有一个表,其中有许多行,我知道oid=1234的记录有最新的updatetimeutc字段,其中updatetimeutc是一个日期字段。因此,我做了以下工作: Query query1 = entityManager.createNativeQuery("select updatetimeutc from TABLE where oid=1234"); List<Object[]> resultList

我试图在Oracle数据库上执行一个包含日期的本机查询,但我没有得到任何结果

我有一个表,其中有许多行,我知道oid=1234的记录有最新的updatetimeutc字段,其中updatetimeutc是一个日期字段。因此,我做了以下工作:

Query query1 = entityManager.createNativeQuery("select updatetimeutc from TABLE where oid=1234");
List<Object[]> resultList = query1.getResultList();
Object[] os = resultList.get(0);
Date date = os[0];

Query query2 = entityManager.createNativeQuery("select oid, updatetimeutc from TABLE where updatetimeutc > :d");
query.setParameter("d", date);
resultList = query.getResultList();
queryquery1=entityManager.createNativeQuery(“从oid=1234的表中选择updatetimeutc”);
List resultList=query1.getResultList();
对象[]os=resultList.get(0);
日期=操作系统[0];
Query query2=entityManager.createNativeQuery(“从updatetimeutc>:d所在的表中选择oid、updatetimeutc”);
query.setParameter(“d”,日期);
resultList=query.getResultList();
此时,我希望resultList.size()==0,但实际情况并非如此。我得到的返回行与查询1中的返回行相同

有人能解释为什么会这样,或者我做错了什么吗


谢谢

解决方案是确保您使用的是Oracle JDBC驱动程序版本,该驱动程序为返回日期字段的本机查询生成java.sql.Timestamp。

是您的
日期
a
java.util.DATE
还是
java.sql.DATE
?我猜这是一个
java.sql.Date
,它将忽略Oracle
Date
的时间组件。这导致第二个查询将传入的参数视为所讨论的日期的午夜,如果Oracle中的时间组件在午夜之后,则返回您最初查询的同一行。这似乎没有什么区别。我从第一个查询中得到一个java.sql.Date。如果我用sql.Date中的.getTime()构造一个java.utl.Date,我会得到相同的结果。如果你得到一个
java.sql.Date
并打印出来,你会发现没有时间组件。如果您打印出存储在Oracle中的
date
值,我敢打赌它确实有一个时间组件。如果你减少了时间,这就解释了你所看到的行为。我怀疑您想要执行
ResultSet.getTimestamp
从Oracle检索值。因为我使用的是本机查询,所以无法返回ResultSet。我得到了一个对象数组的列表。还有什么其他方法可以从针对Oracle DB的本机查询中获取日期字段呢?毫无疑问,我不是JPA专家。不过,我希望您希望从
resultList
中获得
java.sql.Timestamp
,而不是
java.sql.Date
。我用原始的JDBC术语表达它,只是因为我更熟悉它。