Общий querydsl orderBy динамическое создание пути с левыми соединениями

Мы столкнулись с проблемой при использовании JPA с Querydsl и Hibernate для управления хранением данных. Пример модели выглядит следующим образом:

@Entity
public class User {
    ....

    @ManyToOne
    @JoinColumn(name = "CATEGORY_ID")
    private Category category;
}

@Entity
public class Category {
    ..
    private String acronym;

    @OneToMany(mappedBy = "category")    
    List userList;    
}

В моем веб-приложении Spring MVC у меня есть поисковая форма с параметрами пользователя и orderBy select. Параметр orderBy может быть либо свойством пользователя, либо свойством категории Параметры orderBy хранятся в виде карты (например, {"авторизоваться" : "адм», {"имя" : "Джон»}. Функция поиска получает параметры поиска (в виде строки) и приведенную выше карту с указанием заказа. Упрощенный код для заказа выглядит следующим образом:

Map orderByMap = new HashMap();
orderByMap.put("firstName", "asc");
orderByMap.put("unit.acronym", "desc");

PathBuilder pbu = new PathBuilder(User.class, "user");

....

for (Map.Entry order : orderByMap.entrySet())
{
    // for simplicity I've omitted asc/desc chooser
    query.orderBy(pbu.getString(order.getKey()).asc());
}

Проблема начинается, когда я хочу ввести сортировку по категориипараметр s, как {"категория "акроним", "по убыванию»}. Как объяснилВотПриведенный выше код заставит querydsl использовать перекрестное соединение с таблицей категорий и опустить Пользователи без категорий, что не является ожидаемым поведением

Я знаю, я должен ввести левое соединение с категориями и использовать псевдоним для сортировки, чтобы заставить его работать, но яищу эффективный способ сделать это динамически. Разбор каждой строки в поисках категории или любого другого объекта (например, "user.category.subcategory.propetry») представлю много уродливого кода и яЯ бы не хотел этого делать.

Буду признателен за помощь с более элегантным решением.

Ответы на вопрос(1)

Ваш ответ на вопрос