是否有可能使用Java方法对JPA结果进行排序?
我有实体:
java.sql.Array
我的意思是代替编写SQL:
+--------+----------+-----------+
| Name | Latitude | Longitude |
+--------+----------+-----------+
| A | x1 | y1 |
| B | x2 | y2 |
| C | x3 | y3 |
+--------+----------+-----------+
我已尝试使用Specification,但如何将自定义java方法注入以下使用的EXPRESSION中:
" 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)
答案 0 :(得分:1)
如果您使用的是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();
答案 1 :(得分:0)
一般情况下,您无法将Java代码作为ORDER BY
表达式。不在SQL或JPA中。
某些数据库(至少是Oracle)允许您在Java中定义存储过程,因此理论上,您可以使用Java编写SP并在import pdfkit
url='https://mp.weixin.qq.com/s?__biz=MzA3NDMyOTcxMQ==&mid=2651249314&idx=1&sn=5338576a80a4145b9808ff06cc980c14'
path_wkthmltopdf = 'C:/Anaconda3/Lib/site-packages/wkhtmltopdf/bin/wkhtmltopdf.exe'
pdfkit.from_url(url=url,output_path='c:/test.pdf',configuration=pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf))'
表达式中使用它。