JPQL للحصول على أقرب السجلات بواسطة خطوط الطول والعرض

StackOverflow https://stackoverflow.com/questions/2064977

  •  20-09-2019
  •  | 
  •  

سؤال

وأنا لديها كيانات مع خطوط الطول والعرض وأود أن اختيار تلك الأقرب إلى نقطة معينة.

ولقد وجدت هذا المثال أن تبدو مثل ذلك ستعمل

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.

ويمكنك استخدامها بأمان استعلام الأصلي.

وهذا النهج كنت تفضل، رغم ذلك، هو لجعل الاستعلام دون حسابات ثم قم بإجراء الحساب على النتيجة في التعليمات البرمجية. لا ينبغي أن يكون خطرا على أداء كبير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top