java - Oracle 函数在通过 JPQL 调用时返回日期但不返回时间

标签 java oracle date jpa jpql

我有一个 Oracle 函数,它接受日期作为参数,并返回日期。函数是这样的:

FUNCTION my_func(par1 IN DATE, par2 IN NUMERIC) RETURN DATE AS
ret_val DATE;
BEGIN
....
END;

我需要在 Java 应用程序中调用此函数,目前正在使用 JPQL 执行此操作。该代码适用于在 JBoss 5 上运行的 Web 应用程序,如下所示:

   Query q = entityMng.createNativeQuery("SELECT MY_FUNC(?1,?2) FROM DUAL");
   java.util.Date now = new Date();
   long param2 = 110L;
   q.setParameter(1, now);
   q.setParameter(2, param2);
   java.sql.Date retSql = null;
   Object obj = q.getSingleResult();
   if (obj != null) {
      retSql = (java.sql.Date) obj;
   }

执行代码后,retSql 变量包含正确的日期,但时间 = 00.00.000。即使使用 java.util.Date 而不是 java.sql.Date 作为 retSql 的类型,我也会获得相同的行为。

在调查这个问题时,我发现了这篇SO帖子How to convert correctly an Oracle Date field into java.util.Date through JPA ,但我不明白如何在我的例子中使用“addScalar”。

如有任何帮助,我们将不胜感激,提前致谢。

最佳答案

尝试在函数中返回时间戳,而不是日期。 DATE 现在只是 Oracle 中的日期,而 TIMESTAMP 应该用于日期/时间。您可以在 JDBC 中设置一个向后兼容性标志来控制这一点。

您使用哪个 JPA 提供商? EclipseLink 应该自动处理这个问题。

关于java - Oracle 函数在通过 JPQL 调用时返回日期但不返回时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278744/

相关文章:

java - KeychainStore 不向 Mac OS X 上的 Java 提供证书

jquery - 用于极端差异日期的最佳 jQuery 日期插件(公元前 1000 年以上 - 今天)

sql - Oracle 窗口函数

sql - 从表中选择,名称存储在字段中

java - 将日期时间对象转换为字符串

MYSQL 选择日期最接近的记录

java - 如何从 Java Web 应用程序调用 Prolog 谓词?

java - 将自定义主题应用到 SciChart Android 中的 SciChartSurface

java - 是否可以在 Eclipse 中指定 F3 进行搜索?

sql - 如何将此 LEFT JOIN 返回的行数限制为一?