在 querydsl 的 orderBy 子句中使用列名
Using column names in orderBy clause in querydsl
我想知道是否有办法在 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());
}
谢谢。
您必须知道列类型才能使用它。所以你需要这样的东西 Map<String, Class<?>> propertyTypeMap = new LinkedHashMap<>()
而不是 List<String> 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());
我想知道是否有办法在 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());
}
谢谢。
您必须知道列类型才能使用它。所以你需要这样的东西 Map<String, Class<?>> propertyTypeMap = new LinkedHashMap<>()
而不是 List<String> 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());