Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在QueryDSL中为时差创建OrderSpecifier?_Java_Mysql_Querydsl - Fatal编程技术网

Java 如何在QueryDSL中为时差创建OrderSpecifier?

Java 如何在QueryDSL中为时差创建OrderSpecifier?,java,mysql,querydsl,Java,Mysql,Querydsl,我想创建一个querydslOrderSpecifier表达式,该表达式按两个sqlTIME值的分钟差排序: @Generated public class QStock extends EntityPathBase<Stock> { public final TimePath<java.time.LocalTime> time1 = createTime(..); public final TimePath<java.time.LocalTime&

我想创建一个
querydsl
OrderSpecifier
表达式,该表达式按两个sql
TIME
值的分钟差排序:

@Generated
public class QStock extends EntityPathBase<Stock> {
    public final TimePath<java.time.LocalTime> time1 = createTime(..);
    public final TimePath<java.time.LocalTime> time2 = createTime(..);
}
当然,
minutesTo()
方法不存在。但我怎样才能做到这一点呢

当然,没有必要以分钟为单位计算差值。我只想把这两次排序的最大区别放在自上而下

我尝试了以下操作,但遇到了一个异常:

Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DIFF_MINUTES, QStock.stock.time1, QStock.stock.time2)


Caused by: java.sql.SQLSyntaxErrorException: (conn=1326) FUNCTION table.diff_minutes does not exist
    at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:236) ~[mariadb-java-client-2.3.0.jar:?]
    at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:165) ~[mariadb-java-client-2.3.0.jar:?]
因此,我尝试将
TIMEDIFF
函数字符串显式添加到querydsl:

//inspired by Ops.DateTimeOps
enum MysqlDateTimeOps implements Operator {
    TIMEDIFF(Comparable.class);

    private final Class<?> type;

    MysqlDateTimeOps(Class<?> type) {
        this.type = type;
    }

    @Override
    public Class<?> getType() {
        return type;
    }
}
结果:

org.springframework.dao.InvalidDataAccessApiUsageException: No pattern found for TIMEDIFF; nested exception is java.lang.IllegalArgumentException: No pattern found for TIMEDIFF
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:373) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]

那么,我如何在querydsl中使用
TIMEDIFF
函数呢?

以下功能可以工作,尽管我希望有一个更简单的解决方案:

Expressions.timeTemplate(Integer.class, "TIMEDIFF({0}, {1})", Arrays.asList(QStock.stock.time1, QStock.stock.time2));
org.springframework.dao.InvalidDataAccessApiUsageException: No pattern found for TIMEDIFF; nested exception is java.lang.IllegalArgumentException: No pattern found for TIMEDIFF
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:373) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527) ~[spring-orm-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
Expressions.timeTemplate(Integer.class, "TIMEDIFF({0}, {1})", Arrays.asList(QStock.stock.time1, QStock.stock.time2));