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

标签 java spring hibernate jpa spring-data-jpa

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

相关文章:

java - Spring Mail 内联图像未附加

java - session.save 不保存到数据库

hibernate - 如何将动态 @PersistenceContext 与 Hibernate 和 JBoss AS 7 连接池一起使用

java - Solr url 的 session ID

java - 在 spring boot rest api 中将图像发送到角度客户端?

java - 通过 vb.net 将焦点设置为 webbrowser 内的 java-inputdialog

spring - Java 示例 : Dynamic Job Scheduling with Quartz

java - Hibernate:有什么方法可以将带有 utf-8 字符的对象保存到 latin1 编码的表中吗?

java - 无法找到或加载主类org.apache.hadoop.hbase.util.HBaseConfTool

java - 使用 java 运行 Hadoop map reduce 作业时抛出空指针异常