gpt4 book ai didi

java - Spring Data JPA 自定义方法排序

转载 作者:行者123 更新时间:2023-12-02 11:54:05 24 4
gpt4 key购买 nike

是否可以使用Java方法对JPA结果进行排序?

我有实体:

+--------+----------+-----------+
| Name | Latitude | Longitude |
+--------+----------+-----------+
| A | x1 | y1 |
| B | x2 | y2 |
| C | x3 | y3 |
+--------+----------+-----------+

我的意思是不要编写 SQL:

    "  ORDER BY (acos(sin(latitude * $RADIAN) * sin(:latitude * $RADIAN)" +
" + cos(latitude * $RADIAN) * cos(:latitude * $RADIAN)" +
" * cos((:longitude * $RADIAN) - (longitude * $RADIAN))" +
" ) * $EARTH_RADIUS)")
fun findDoctorDepartmentsInRange(@Param("latitude") latitude: Double,
@Param("longitude") longitude: Double)

我尝试过 Specification但如何将自定义 java 方法注入(inject)到下面使用的 EXPRESSION 中:

query.orderBy(cb.asc(EXPRESSION))

最佳答案

如果您使用 Spring JPA,则可以使用 Sort 对象,并且将其附加到查询中,而不是附加到规范中

据我所知,sntax 会是这样的

repository.findAll(specification,  new Sort(Sort.Direction.ASC, "field"));

编辑

我不确定 Sort 是否支持表达式,因此如果您想在 Java 代码中执行此操作,则需要创建 Criteria API 查询,类似于这样

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<SomeClass> query = cb.createQuery(SomeClass.class);
Root<SomeClass> root = query.from(SomeClass.class);
Expression EXPRESSION = <<TypeYourExpression>>;
query.orderBy(cb.asc(EXPRESSION))
query.where(specification.toPredicate(root,query,cb))
List<SomeClass> result = em.createQuery(query).getResultList();

关于java - Spring Data JPA 自定义方法排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711779/

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