【问题标题】:Using column names in orderBy clause in querydsl在querydsl的orderBy子句中使用列名
【发布时间】:2021-07-04 21:23:24
【问题描述】:

我想知道是否有办法在 querydsl JPA 的 orderBy 子句中使用列名。我想根据来自外部输入的列名构建多个 orderBy 条件。

假设我有实体Person 和列名要排序。我想做一些类似下面的代码。

List<String> sortingColumns = ...; // comes from external.
QPerson person = QPerson.person;
JPAQuery<Person> query = jpaQueryFactory.select(person).from(person);
for (String column : sortingColumns) {
    // Is there something like person.getPath(column) in querydsl?
    query = query.orderBy(person.getPath(column).asc());
}

谢谢。

【问题讨论】:

    标签: querydsl


    【解决方案1】:

    尝试使用ExpressionUtils.path

    您必须知道列类型才能使用它。所以你需要像Map&lt;String, Class&lt;?&gt;&gt; propertyTypeMap = new LinkedHashMap&lt;&gt;() 这样的东西而不是List&lt;String&gt; sortingColumns = ...

    List<OrderSpecifier> orderBy = new LinkedList<>();
    
    for (Entry<String, Class<?>> entry: propertyTypeMap.entrySet()) {
        String property = entry.getKey();
        Class<?> type = entry.getValue();
        
        orderBy.add(ExpressionUtils.path(type, person, property).asc()); 
    }
    
    query.orderBy(orderBy.toArray());
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多