У меня есть приложение с весенней загрузкой.Есть куча сущностей.Некоторые сущности 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"
Можно ли это сделать, манипулируя выражением SetPath
QTask.task.reviewers
?
Например, как я вижу это:
...
List<OrderSpecifier<?>> orders = Collections.singletonList(((ComparableExpressionBase<?>)(QTask.task.reviewers.<SOMETHING>)).asc());
...
Спасибо!