Sorgularımı gerçekleştirmek için Spring Boot ve dolayısıyla Spring Data kullanıyorum. Spring Data'da karmaşık sorguları oluşturmanın en iyi yolunun @Query
ek açıklama ile olduğunu düşünüyorum. Ancak, özel sorgumdaki SELECT
alanlarının belirli bir getiri sınıfındaki alanlarla eşleşmesi gerektiğini anlıyorum.Yay Verili Karmaşık sorgu
Aşağıdaki SQL ile eşleştirmek için bir Spring Data sorgusunu nasıl oluşturabilirim?
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: Dönüş nesnem SayımSayıcısı olacak.
PS2: Herhangi bir değişiklik yapabileceğini sanmıyorum ama MySQL ile çalışıyorum.
Düzenleme 1: @Bunti tarafından önerildiği gibi, bunlardan bazılarını denedikten sonra aldığım haberler bunlar. Eğer yerine nativeQuery=true
ile @Query
kullanmanın this post takip etmek zorunda gönderilen şeyle query.setMaxresults
kullanmak için
. Bu yüzden this yaptım ve aşağıdaki özel aldı: Sonunda o çalışma var
org.hibernate.hql.internal.ast.QuerySyntaxException:
unexpected token: CensusSectorGroup near line 1, column 318
'SELECT' ifadelerinizde' CS. * 'Gibi bir şeye sahip olamazsınız. Döndüğünüz şey JPQL kullanıyorsanız varlık öznitelikleri veya tam varlıktır. – Bunti
@Bunti Geri dönüşünüz için teşekkürler. CS. * 'Kısmı en kolay olanıdır. Benim endişem, dönüş sınıfımın bir parçası olmayan ve MySql'e özgü olduğuna inandığım LİMİT 1'i kullanan 'distance_in_km' hakkında. Onları nasıl ele alırım? –
Tamam, sadece bu [StackOverFlow'da] bulundu (http://stackoverflow.com/questions/34441163/return-more-data-than-model-contains-using-spring-data#answer-34449345) distance_in_km' alanı. LİMİT 1 'ne dersin? –