Есть ли возможность сортировать сущности по выражению SetPath? - PullRequest
0 голосов
/ 23 января 2019

У меня есть приложение с весенней загрузкой.Есть куча сущностей.Некоторые сущности Task имеют таких членов, как Set<User> других сущностей User.Поэтому мне нужно отсортировать список Task сущностей по объединенному строковому значению, которое состоит из некоторых строковых данных User сущностей.Есть ли возможность сделать это с помощью выражений querydsl?

Итак, код:

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    @Column(unique=true)
    private String email;
}

@Entity
public class Task {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany
    @JoinTable(
        name = "reviewerTaskAssociation",
        joinColumns = @JoinColumn(name = "taskId")
    )
    private Set<User> reviewers = new HashSet<>();
}

//Generated
public class QTask extends EntityPathBase<Task> {
    public static final QTask task = new QTask("task");
    public final NumberPath<Long> id = createNumber("id", Long.class);
    public final SetPath<User, QUser> reviewers = this.<User, QUser>createSet("reviewers", User.class, QUser.class, PathInits.DIRECT2);
    ...
}

Например, как это работает для сортировки по id:

...
List<OrderSpecifier<?>> orders = Collections.singletonList(((ComparableExpressionBase<?>)(QTask.task.id)).asc());
Pageable pageable = PageRequest.of(pageIndex, pageSize, new QSort(orders));
Page<Task> page = repository.findAll(predicate, pageable);
List<DTO> dtos = page.stream().map(mapper::map).collect(Collectors.toList());
...

Мне нужно отсортировать список Task по значению объединенной строки, которое состоит из писем User, разделенных запятой:

"user1@email.com,user2@email.com,user3@email.com"

Можно ли это сделать, манипулируя выражением SetPathQTask.task.reviewers?

Например, как я вижу это:

...
List<OrderSpecifier<?>> orders = Collections.singletonList(((ComparableExpressionBase<?>)(QTask.task.reviewers.<SOMETHING>)).asc());
...

Спасибо!

...