java Oracle函数在通过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
的类型,我也会获得相同的行为
在调查这个问题的时候,我看到了这篇文章How to convert correctly an Oracle Date field into java.util.Date through JPA,但我不明白在我的例子中如何使用“addScalar”
任何帮助都将不胜感激,提前谢谢
# 1 楼答案
使用XMLAdapter怎么样
公共类DateAdapter扩展了XmlAdapter{
然后将其添加到实体中;比如
这是我以前学过的一个教程; http://weblogs.java.net/blog/kohsuke/archive/2005/04/xmladapter_in_j.html
# 2 楼答案
尝试在函数中返回时间戳,而不是日期。DATE现在在Oracle中只是一个日期,时间戳应该用于日期/时间。您可以在JDBC中设置一个向后兼容标志来控制这一点
您使用的是哪家JPA提供商?EclipseLink应该自动处理这个问题