JPQL للحصول على أقرب السجلات بواسطة خطوط الطول والعرض
سؤال
وأنا لديها كيانات مع خطوط الطول والعرض وأود أن اختيار تلك الأقرب إلى نقطة معينة.
ولقد وجدت هذا المثال أن تبدو مثل ذلك ستعمل
SELECT *,
SQRT(POW((69.1 * (locations.latitude - 27.950898)) , 2 ) +
POW((53 * (locations.longitude - -82.461517)), 2)) AS distance
FROM locations
ORDER BY distance ASC
LIMIT 5
ولكن أنا أفضل أن تفعل ذلك مع JPQL منذ لدي مجموعة من الآخر ينضم الخ التي يشعر أسهل أن تفعل في JPQL بدلا من الاستعلام الأصلي.
وعندما أحاول شيئا من هذا القبيل النقابة تشكو الرمز المميز SQRT.
SELECT DISTINCT p, SQRT(....) AS distance, FROM Place p .... ORDER BY distance ASC
وأي شخص لديه يعرف كيفية كتابة استعلام مثل هذا، أو ربما أفضل نهج آخر؟
وشكرا! / أوسكار
المحلول
وبقدر ما استطيع ان اقول من البحث في هذا وربما التجربة والخطأ هي ببساطة ليست مجهزة JPQL للتعامل مع هذا السيناريو. واضطررت الى اعادة كتابة الاستفسارات بصفتي مواطن.
نصائح أخرى
وJPQL لغة الإشارة يقول ما يلي:
<اقتباس فقرة>وfunctions_returning_numerics :: = ABS (simple_arithmetic_expression) | SQRT (simple_arithmetic_expression) | MOD (simple_arithmetic_expression، simple_arithmetic_expression) | SIZE (collection_valued_path_expression)
اقتباس فقرة> وهكذا، لم يكن لديك POW
.
ويمكنك استخدامها بأمان استعلام الأصلي.
وهذا النهج كنت تفضل، رغم ذلك، هو لجعل الاستعلام دون حسابات ثم قم بإجراء الحساب على النتيجة في التعليمات البرمجية. لا ينبغي أن يكون خطرا على أداء كبير.