Java 如何在Spring中按另一个实体的属性排序?

Java 如何在Spring中按另一个实体的属性排序?,java,spring,spring-boot,sorting,Java,Spring,Spring Boot,Sorting,所以我在一个网站上工作(Angular前端,Java后端) 我有两个不同的@Entity类。它们以1:1的比例连接。 让我们称它们为A和BA具有属性a1,a2和b\u id,b具有b1,b2 现在,我制作了一个扩展crudepository的接口,通过JPQL将这两个表连接起来。 现在的问题是:每当我想按A中的属性对它们进行排序时,它就会起作用;当我想按B中的属性对它们进行排序时,它会说“在A中找不到b1” 查询示例: @Query("SELECT ... FROM A a JOIN

所以我在一个网站上工作(Angular前端,Java后端)

我有两个不同的@Entity类。它们以1:1的比例连接。 让我们称它们为
A
B
<代码>A具有属性
a1
a2
b\u id
b
具有
b1
b2

现在,我制作了一个扩展
crudepository
的接口,通过JPQL将这两个表连接起来。 现在的问题是:每当我想按A中的属性对它们进行排序时,它就会起作用;当我想按B中的属性对它们进行排序时,它会说“在
A
中找不到
b1

查询示例:

@Query("SELECT ... FROM A a JOIN B b ON a.b.id = b.id")
Page<CustomTableRow> test(Pageable pageable);
起初我以为Spring会自动在这两个类中的一个类中搜索属性,但似乎没有。 一种解决方法是根据我期望属性名的位置为属性名设置前缀,这意味着我必须在所有属性(如20)之间切换大小写,并在HTTP请求的属性名前面设置“a”或“b”,以获得如下内容:

Sort.by(方向,“b.b2”)
Sort.by(方向,“a.a2”)
而不是,比如说,
Sort.by(方向,“b2”)
,这将产生上述错误


但这很难看。有更好的方法吗?

您必须从根指定属性的完整路径(在您的例子中是A类)是的,但正如我所说:如果我想为所有可能的属性指定完整路径,我需要进行大量的切换,以确定我在HTTP请求中获得的属性是在A还是B中。您可以使用属性的短别名和该属性的实际完整路径创建某种类型的
映射。在实际调用存储库之前,您可以基于该映射替换排序属性。我必须为这两个映射所做的工作非常相似,唯一的区别是,在最好的情况下,映射是O(1)。所以没有办法说Spring应该自己找到属性?这对Spring来说太“不合适”了。
PageRequest.of(page, pageSize, Sort.by(direction, attributeName))