سؤال

حاولت هذا:

from Table where (:par1 is null or col1 = :par1)

لكن يحدث ذلك

from Table where :par1 is null

يعيد دائمًا جميع صفوف الجدول ، حتى لو لم يكن: par1 فارغًا.

في حين

 select * from table where col1 = 'asdf'

لا يعيد أي صف.

لا يمكنني استخدام القواعد النحوية الأصلية لأنه من المفترض أن يعمل طلبي على محركات قاعدة بيانات مختلفة

هل كانت مفيدة؟

المحلول

ما يعادل nvl الأمر في HQL هو coalesce يأمر. coalesce(a,b) سيعود a إذا a ليس فارغا ، وإلا b.

لذلك تريد شيئًا على غرار:

from Table where col1 = coalesce(:par1, 'asdf')

نصائح أخرى

إذا كانت قاعدة البيانات الأساسية الخاصة بك هي Oracle ، فيمكنك استخدام وظيفة NVL ، فقد جربتها وعملت بالنسبة لي.

Query query = session.createQuery(
                    " select ft from FeatureToggle ft left outer join ft.featureToggleCustomerMap "
                    + " ftcm where nvl(ftcm.custId,:custId) = :custId");

query.setParameter("custId", Long.valueOf(custId));

يمكن أن تكون حالة الاستخدام الخاصة بك مختلفة ويمكنك استخدام وظيفة NVL وفقًا لمتطلباتك إذا كانت قاعدة البيانات NVL ، غير متأكد من تنفس قواعد البيانات الأخرى ، حيث استخدمت هذا الرمز فقط لـ Oracle. أتمنى أن يساعد ذلك.

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