【问题标题】:QueryDSL Date arithmeticQueryDSL 日期算法
【发布时间】:2016-01-26 18:40:44
【问题描述】:

我有一张这样的桌子:

CREATE  TABLE IF NOT EXISTS `sma`.`MIGRation` (
`MIGR_ID` BIGINT NOT NULL AUTO_INCREMENT ,
`MIGR_From` VARCHAR(1024) NOT NULL ,
`MIGR_To` VARCHAR(1024) NOT NULL ,
`MIGR_Validity_Days` INT NOT NULL ,
`MIGR_CreationDate` DATETIME NOT NULL ,
PRIMARY KEY (`MIGR_ID`) );

如何在 QueryDSL 中编写表达式来查找仍然有效的条目(creationDate + validation_Days)?

SELECT * FROM MIGRation WHERE DATE_ADD(MIGR_CreationDate, INTERVAL MIGR_Validity_Days DAY) > now()

【问题讨论】:

    标签: java jpa querydsl


    【解决方案1】:

    对于算术查询,请查看com.querydsl.core.types.dsl.Expressions 类。在这种情况下可以使用Expressions::dateTimeOperation:

    import com.querydsl.core.types.Ops;
    import com.querydsl.core.types.dsl.*;
    import com.querydsl.sql.SQLQuery;
    ...
        @Transactional
        public List<MIGRationEntity> getMigration() {
            SQLQuery<MIGRationEntity> query = selectFrom(QMIGRation.MIGRation)
                .where(
                    Expressions.dateTimeOperation(
                        Date.class, Ops.DateTimeOps.ADD_DAYS,
                        QMIGRation.MIGRation.mIGRCreationDate,
                        QMIGRation.MIGRation.mIGRValidityDays)
                    .gt(DateTimeExpression.currentTimestamp()));
            String sql = query.getSQL().getSQL();
            System.out.print(sql);
            return query.fetch();
        }
    ...
    

    创建的SQL:

    select MIGRation.MIGR_CreationDate, MIGRation.MIGR_From, MIGRation.MIGR_ID, MIGRation.MIGR_To, MIGRation.MIGR_Validity_Days
    from MIGRation MIGRation
    where date_add(MIGRation.MIGR_CreationDate, interval MIGRation.MIGR_Validity_Days day) > current_timestamp
    

    【讨论】:

    • 我正在使用这个确切的代码,但在结果查询中我没有得到 date_add 函数。相反,它有函数schema_name.add_minutes,但它失败了,因为没有这样的函数。
    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2017-05-15
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2010-10-23
    相关资源
    最近更新 更多