是否可以使用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/