Spring 数据以及如何按不在实体中的列排序

Spring Data and how to sort by a column not in an Entity

我是 Java Spring 的新手,我在尝试了解它的工作原理。我的目标是对不在实体中的 JPQL 查询应用排序。

我一直在查看的参考资料:

Spring Sort Class Docs

Spring Sort crash course

如果我声明以下查询

@Query("SELECT a, b.someColumn FROM TableA a INNER JOIN a.tableB b where a.search like %?1%"
public Page<Object[]> findSomething(String search, Pageable pageable);

这将生成一个对象列表,其形式为

Object[0] = TableA entity
Object[1] = b.someColumn value

我一直在阅读有关排序 class 的内容,但我还没有找到通过 b.someColumn 进行排序的方法。

如果我执行以下操作

Sort sort = new Sort(Sort.Direction.DESC, "someColumn");
Page<Object[]> things = mgr.findSomething("junk", sort);

然后 JPQL 结果为

SELECT a, b.someColumn FROM TableA a INNER JOIN a.tableB b where a.search like ?1 order by a.someColumn

当我希望它成为

SELECT a, b.someColumn FROM TableA a INNER JOIN a.tableB b where a.search like ?1 order by b.someColumn

如何防止它在查询中将排序列附加到实体?有没有办法禁用此功能并使其按字面解释我的排序列?是否有更好的排序技术更适合我的情况?

Sort sort = new Sort(Sort.Direction.DESC, "b.someColumn");

嗯,看来我在原来的问题中回答了我自己的问题。出于某种原因,我的浏览器没有及时更新我最近的更改,而且我没有看到排序工作。

引擎将按字面解释排序列。

Sort sort = new Sort(Sort.Direction.DESC, "b.someColumn");

将导致

SELECT a, b.someColumn FROM TableA a INNER JOIN a.tableB b where a.search like ?1 order by b.someColumn

这正是我想要的。