我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
在另一个过程中,我调用并执行以下操作:
BooleanBuilder pBuilderBusquePerso = new BooleanBuilder();
Predicate filter =getPredicate(pBuilderBusquePerso);
Page<Entity> iLista = myRepository.findAll(getMyPredicate(usr, filter, tipoListado, null, estados), paginacion);
Run Code Online (Sandbox Code Playgroud)
所以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)<?
)
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
引起:java.sql.SQLException:ORA-00904:"DIFF_DAYS":标识符无效
所以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 …Run Code Online (Sandbox Code Playgroud)