java - 将 JPA 与 Oracle 一起使用并按小时分组时出现问题

标签 java oracle jpa group-by hour

我在将 JPA 与 Oracle 结合使用并按小时分组时遇到问题。 这是场景: 我有一个名为 EventData 的条目。该实体有一个名为 startOfPeriod 的 java.util.Date 字段。该字段映射到数据类型为 DATE 的表字段中。 我使用的查询是这样的:

select min(ed.startOfPeriod) as eventDate,
(...)
from
Event e inner join e.eventDatas ed
(...)
group by
    year(ed.startOfPeriod), 
    month(ed.startOfPeriod), 
    day(ed.startOfPeriod), 
    hour(ed.startOfPeriod) 
order by 1

如果我按“hour(ed.startOfPeriod)”删除组,它工作正常(它不会产生任何错误,但它不会执行我想要的操作)。 当我插入这个 group by 子句时,它会出现以下异常:

Caused by: java.sql.SQLException: ORA-30076: campo de extração inválido para origem de extração
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:813)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3415)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
at org.hibernate.loader.Loader.doQuery(Loader.java:697)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2232)

分析 error code ,当“提取源不包含指定的提取字段”时发生。但是提取的源(startOfPeriod 字段)是数据类型 DATE(有一个小时部分)。

相同的代码在 SQL Server 中就像一个魅力。

谁知道这是怎么回事?

谢谢!

最佳答案

您尝试过 TO_CHAR(d, 'HH24') 吗?你也可以 trunc() 到小时......

关于java - 将 JPA 与 Oracle 一起使用并按小时分组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838912/

相关文章:

java - 为 hadoop MapReduce Cleanup 添加进度跟踪机制

java - JPA 一对多关系映射

database - 调用过程时出现错误 "ORA-54033"

java - 如何映射返回CURSOR的Oracle函数的选择查询

spring - javax.persistence.TransactionRequiredException : Executing an update/delete query

spring - 在 Spring 中使用多个数据源

java - 如何对大量 JUnit 测试进行分组/分类

java - 有没有一种方法可以在没有 xml 或属性文件的情况下将 java 变量/对象存储在应用程序上下文中

java - 在 Java Swing (Netbeans) 中创建下一步按钮

oracle - Apache Squoop错误