我是 Java Spring 的新手,并试图了解它是如何工作的。我的目标是对不在实体中的 JPQL 查询应用排序。
我一直在看的参考资料:
如果我声明以下查询
@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);
Run Code Online (Sandbox Code Playgroud)
这将产生具有以下形式的对象列表
Object[0] = TableA entity
Object[1] = b.someColumn value
Run Code Online (Sandbox Code Playgroud)
我一直在阅读 Sort 类,但我还没有找到通过 b.someColumn 进行排序的方法。
如果我执行以下操作
Sort sort = new Sort(Sort.Direction.DESC, "someColumn");
Page<Object[]> things = mgr.findSomething("junk", sort);
Run Code Online (Sandbox Code Playgroud)
然后 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");
Run Code Online (Sandbox Code Playgroud)
好吧,看起来我在原来的问题中回答了我自己的问题。由于某种原因,我的浏览器没有及时更新我最近的更改,并且我没有看到排序工作。
引擎将按字面解释排序列。
Sort sort = new Sort(Sort.Direction.DESC, "b.someColumn");
Run Code Online (Sandbox Code Playgroud)
将会导致
SELECT a, b.someColumn FROM TableA a INNER JOIN a.tableB b where a.search like ?1 order by b.someColumn
这正是我想要的。
| 归档时间: |
|
| 查看次数: |
6291 次 |
| 最近记录: |