gpt4 book ai didi

java - 如何通过在 Spring 中乘以一些值来对结果进行排序?

转载 作者:行者123 更新时间:2023-12-01 00:34:39 24 4
gpt4 key购买 nike

所以,我有模型 Book,它具有物理尺寸:高度、宽度和长度。我的存储库方法如下所示:

@Query(value = "SELECT b FROM Book b ORDER BY b.bookHeight * b.bookWidth * b.bookLength")
List<Book> getAllBooksOrderedByVolumePaginated(PageRequest request);

我想创建带有查询参数 sortOrder 的端点,我可以在其中放置 ascdesc 排序顺序。

服务层有下一段代码:

private Sort.Direction resolveDirection(String order) {
Sort.Direction orderType = null;

if (order.equals("desc"))
orderType = Sort.Direction.DESC;
else if (order.equals("asc"))
orderType = Sort.Direction.ASC;

return orderType;
}

public List<BookDto> findAllBooksSortedByVolume(int page, int size, String order) {
Sort.Direction orderType = resolveDirection(order);
List<Book> books = bookRepository.getAllBooksOrderedByVolumePaginated(
PageRequest.of(page - 1, size, Sort.by(orderType)));

return mapToDto(books);
}

我得到了指定排序参数的异常:

java.lang.IllegalArgumentException: At least one property must be given!
at org.springframework.util.Assert.isTrue(Assert.java:118)
at org.springframework.data.domain.Sort.by(Sort.java:165)
at ua.com.epam.service.BookService.findAllBooksSortedByVolume(BookService.java:106)
at ua.com.epam.controller.BookController.getAllBooksSortedInSomeDimension(BookController.java:156)

我该如何解决?

最佳答案

如果您使用 Hibernate 作为 JPA 提供程序,那么您可以使用 @Formula 声明一个“虚拟列”。

@Entity
class Book {
...
@Formula("bookHeight * bookWidth * bookLength")
private long volume;

// Just in case you want to access volume in java code.
// If you don't want then remove `getVolume` from class
@Transient
public long getVolume() {
return volume;
}
...
}

并按这一列排序

PageRequest.of(page - 1, size, Sort.by(orderType, "volume"))

关于java - 如何通过在 Spring 中乘以一些值来对结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com