我正在用queryDsl進行查詢。在Oracle 11上使用queryDsl獲取兩天之間天差的問題
我用它來創建一個BooleanExpresion
public BooleanBuilder getPredicate(BooleanBuilder pBuilderBusquePerso){
int dias = 30;
QEntity1 qEntity = QEntity1.entity;
pBuilderBusquePerso = pBuilderBusquePerso.and(qEntity.date1 != null
? (SQLExpressions.datediff(DatePart.day, qEntity.date2, qEntity.date1).lt(dias)) :null);
return pBuilderBusquePerso;
}
而在另一個程序我打電話,然後執行此爲:
BooleanBuilder pBuilderBusquePerso = new BooleanBuilder();
Predicate filter =getPredicate(pBuilderBusquePerso);
Page<Entity> iLista = myRepository.findAll(getMyPredicate(usr, filter, tipoListado, null, estados), paginacion);
所以SQL查詢的結果是:
select table1 ta1
......
exists (
select 1
from
table2 ta2
where
ta1.inv_id=ta2.inv_id
and diff_days(ta1.inv_exp_date, ta2.exp_date)<?
)
給出以下錯誤:
Caused by: java.sql.SQLException: ORA-00904: "DIFF_DAYS": invalid identifier
所以ddbb oracle的querysql翻譯是錯誤的。有沒有辦法將queryDsl翻譯成oracle函數?我需要什麼?
我也試圖與DATETRUNC
pBuilderBusquePerso = pBuilderBusquePerso.and(qEntity.date1 != null
? (SQLExpressions.datetrunc(DatePart.day, qEntity.date1).castToNum(Integer.class).subtract(SQLExpressions.datetrunc(DatePart.day, qEntity.date2).castToNum(Integer.class))).lt(dias) :null);
exists (
select 1
from
table2 ta2
where
ta1.inv_id=ta2.inv_id
and cast(trunc_day(ta2.exp_date) as number(10,0))-cast(trunc_day(ta1.inv_exp_date) as number(10,0))<?
給人一種類似的錯誤:
Caused by: java.sql.SQLException: ORA-00904: "TRUNC_DAY": invalid identifier
而且addDays
pBuilderBusquePerso = pBuilderBusquePerso.and(qEntity.date1 != null
? ((SQLExpressions.addDays(qEntity.date2, dias)).after(qEntity.date1)):null);
exists (
select 1
from
table2 ta2
where
ta1.inv_id=ta2.inv_id
and add_days(ta1.inv_exp_date, ?)>ta1.exp_date
)
給予另一個類似的錯誤:
Caused by: java.sql.SQLException: ORA-00904: "ADD_DAYS": invalid identifier
我試圖按照這個測試來構建我的查詢 https://searchcode.com/codesearch/view/17765673/
在此先感謝。
編輯:這是完整的錯誤跟蹤。
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:231)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:214)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
.....................
......................
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
......................
......................
......................
(And here comes the ORA error)
Caused by: java.sql.SQLException: ORA-00904: "TRUNC_DAY": invalid identifier
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)
.....
oracle中沒有這些函數。 – OldProgrammer
那麼我知道,因爲它在oracle sql developer中試過查詢。但有沒有辦法將queryDsl表達式轉換爲oracle函數? – Vic
你可能會說DATE1-DATE2這樣的天數差異 – Randy