我有一个 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/