0
我使用Spring Boot,因此使用Spring Data来执行我的查询。我猜想在Spring Data中创建复杂查询的最佳方法是使用@Query
注释。但是,我知道我的自定义查询中的SELECT
字段必须匹配给定返回类的字段。Spring数据的复杂查询
如何创建一个Spring数据查询以匹配下面的SQL?
SELECT latitude, longitude, CS.*,
111.045* DEGREES(ACOS(COS(RADIANS(:lat))
* COS(RADIANS(CS.lat_centroid))
* COS(RADIANS(:long) - RADIANS(CS.long_centroid))
+ SIN(RADIANS(:lat))
* SIN(RADIANS(CS.lat_centroid)))) AS distance_in_km
FROM CensusSector CS
ORDER BY distance_in_km ASC LIMIT 1
PS1:我的返回对象将是CensusSector。
PS2:我不认为它可以有任何区别,但我正在使用MySQL。
编辑1:正如@Bunti建议的那样,这些是我尝试了一些他的观点后得到的消息。
为了使用query.setMaxresults
您发送的内容我必须按照this post而不是使用@Query
和nativeQuery=true
。所以,我没有this并得到了以下异常:
org.hibernate.hql.internal.ast.QuerySyntaxException:
unexpected token: CensusSectorGroup near line 1, column 318
你的'SELECT'语句中不能有像'CS。*'这样的东西。如果您使用JPQL,您应该返回的是实体属性或完整的实体。 – Bunti
@Bunti谢谢你的回报。 'CS。*'部分是最简单的部分。我关心的是'distance_in_km',它不是我返回类的一部分,并且使用了我认为是特定于MySql的LIMIT 1。如何处理它们? –
好的,刚刚发现[这在StackOverFlow](http://stackoverflow.com/questions/34441163/return-more-data-than-model-contains-using-spring-data#answer-34449345)这有助于' distance_in_km'字段。 'LIMIT 1'如何? –