لماذا findAllBy* فشل عند استخدام ثلاثة شروط في الكؤوس/جورم ؟
سؤال
النظر في المسائل التالية الأعراف من الكؤوس/GORM ديناميكية مكتشف طريقة findAllBy*:
def foo1 = Foo.findAllByYear(yyyy)
def foo2 = Foo.findAllByMonth(mm)
def foo3 = Foo.findAllByDay(dd)
def foo4 = Foo.findAllByYearAndMonth(yyyy, mm)
def foo5 = Foo.findAllByYearAndDay(yyyy, dd)
def foo6 = Foo.findAllByYearAndMonthAndDay(yyyy, mm, dd)
println "# foo1=${foo1.size()} foo2=${foo2.size()} foo3=${foo3.size()}"
println "# foo4=${foo4.size()} foo5=${foo5.size()} foo6=${foo6.size()}"
الخمسة الأولى من هذه الديناميكية الباحث الأعراف يعمل كما هو متوقع.
ومع ذلك, السادس الذي فشل مع InvalidPropertyException ("لا المنشأة العثور على اسم [yearAndMonth] الفصل [فئة فو]").
السؤال:
لماذا لا سدس العمل ؟ ليس findAllBy* قادرة على التعامل مع أكثر من عقدين من شروط ؟ الحل/العمل ؟
المحلول
تيد الجواب الصحيح ، ولكن السبب لماذا الكؤوس لا يدعم أكثر من 2 المسندات لأنه إذا كان كل العطف ليست هي نفسها ثم فإنه ليس من الواضح ما هي النية.
أو في سهل الانجليزية...
- إنه من الواضح ما
findAllByYearAndMonthAndDay(1999,2,3)
يعني - الواضح أيضا ما
findAllByYearOrMonthOrDay(1999,2,3)
يعني - ولكن ليس من الواضح ما
findAllByYearOrMonthAndDay(1999,2,3)
يعني
ومع ذلك ، إذا كان كل العطف هي نفس (كل and
s أو كل or
s), ثم لا يوجد أي سبب لماذا أكثر من 2 المسندات لا يمكن أن تكون معتمدة.في الواقع, إذا كنت البحث على الكؤوس جيرة ستجد هناك بالفعل قضية مفتوحة من أجل هذا.التصويت لذلك إذا كنت أشعر بقوة حول هذا الموضوع.
بالمناسبة ، IntelliJ الكؤوس المساعد خطأ تنص على إنجاز قانون الحيوية المكتشفون مع أكثر من 2 المسندات.
الحل/الحل ببساطة كتابة معايير الاستعلام أو استخدام HQL بدلا من ذلك.
نصائح أخرى
لا, ليس حاليا.انها محدودة إلى 2 شروط في هذه اللحظة.أكثر من 2 نظرة على معايير البناء أو findAllWhere الأساليب.