2015-06-09 89 views
2

在我的SQL服务器,现场DATE保存在浮点格式(ES:DATADOC = 42155铸造领域

我要导入MySQL数据库作为DATETIME领域。 我尝试的SQL服务器上投领域与此查询:

SELECT CAST(DATDOC as DATETIME) -2 FROM FATTURE where id=25460; 

,结果是正确的。

现在,我想它在JPA查询翻译:

TypedQuery<DateTime> convFattura = emI24.createQuery(" SELECT CAST(dataFattura as DATETIME) -2 FROM FatturaI24 f where f.id = :idFattura", DateTime.class); 

但我得到这个错误:

09-06-2015 14:32:00 ERROR: org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task. 
java.lang.NullPointerException 
    at org.hibernate.dialect.function.CastFunction.render(CastFunction.java:55) 
    at org.hibernate.hql.internal.ast.SqlGenerator.endFunctionTemplate(SqlGenerator.java:220) 
    at org.hibernate.hql.internal.antlr.SqlGeneratorBase.methodCall(SqlGeneratorBase.java:2326) 
    at org.hibernate.hql.internal.antlr.SqlGeneratorBase.simpleExpr(SqlGeneratorBase.java:2681) 
    at org.hibernate.hql.internal.antlr.SqlGeneratorBase.expr(SqlGeneratorBase.java:1476) 

什么是DATETIME科协的正确语法?

任何想法?

+0

什么是“-2”?你想减去2天吗?几个月?要么 ???? –

+0

@RavinderReddy天,以这种方式我获得了正确的traslate(我已经验证了这一点) – PaolaG

+0

CAST是无效的JPQL。您可以使用JPQL标准“FUNCTION”(在JPA 2.1中)使用SQL函数“CAST” –

回答

0

当您在评论说,返回值是float类型,因此我们将做些什么是不是做在SQL中投,但转换的浮动使用Java代码,你有波纹管权代码:

Query convFattura = emI24.createQuery(" SELECT f.dataFattura FROM FatturaI24 f where f.id = :idFattura"); 
      convFattura = convFattura.setParameter("idFattura", idFatturaValue); 
     float dataFattura = convFattura.getSingleResult(); 

Java代码转换成浮动迄今:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
calendar.set(Calendar.HOUR_OF_DAY, 0); 
calendar.add(Calendar.HOUR_OF_DAY, (int) dataFattura); 
calendar.set(Calendar.MINUTE, (int) ((dataFattura * 60) % 60)); 
calendar.set(Calendar.SECOND, (int) ((dataFattura * 3600) % 3600)); 

DateFormat fmt = new SimpleDateFormat(); 
fmt.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); 
System.out.println(fmt.format(calendar.getTime())); 

希望这是对您有用!

+0

不好意思,但我的问题不是这个。我想在DATETIME中转换一个浮点值。查询提取所有值运行,但dataFattura值是(p.e:42155),这个值对我来说是不可用的。 – PaolaG

+0

我修改了我的答案,你可以检查它,并打电话给我,如果这样可以解决你的问题 – TinyOS

+0

我曾经用过这种方式,但不运行。结果是不正确的(es:dataFloat = 42171,DateFormat = 07/04/20 5.00)在我的第一个查询结果集开始到2012年。这是一个神秘的:) – PaolaG

1

尝试使用Convert函数而不是Cast函数。 它适合我...!

+0

你可以改进你的答案,增加参考资料并解释两种方法之间的差异,以及为什么一个工作而不是另一个工作。 – mathielo