java - JPA 查询中的 Cast 字段

标签 java mysql sql-server jpa

在我的 sql-server 中,字段 DATE 以浮点格式保存(es: DATADOC = 42155)

我想将 mysql 数据库中的字段导入为 DATETIME。 我尝试在 sql-server 上使用此查询来转换字段:

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 中 CAST 的正确语法是什么?

有什么想法吗?

最佳答案

正如您在评论中所说,返回值是一个 float 类型,所以我们要做的不是在 sql 中进行强制转换,而是用 java 代码转换 float 并且您有正确的代码:

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

将 float 转换为日期的 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()));

希望对你有用!

关于java - JPA 查询中的 Cast 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733032/

相关文章:

java - 该键是否具有映射到内存位置的哈希表?

java - 带有 OpenJDK 11 且没有 Spring Context 的 AspectJ 1.9.4 无法作为依赖模块工作

mysql - 搜索查询的搜索性能问题

sql - 处理 NULL 和空字符串值时编写联合查询的最佳方法

c# - 基于本地文件的 SQL Server

Java 通配符通用,在 <? 上没有出现错误super String> 但否则错误为 "cannot be applied to Java.lang.String"

java - 如何调用 Stack 中所有对象的 toString() 方法?

php - 考勤、存储记录

php - MySql PHPmyadmin 错误 #1062

sql-server - 恢复sql server数据库而不删除现有数据库表