Spring 数据以及如何按不在实体中的列排序
Spring Data and how to sort by a column not in an Entity
我是 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);
这将生成一个对象列表,其形式为
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
这正是我想要的。
我是 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);
这将生成一个对象列表,其形式为
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
这正是我想要的。