سؤال

الجمع بين عمليات الإغلاق (FCM) والكمال العام ، هل سيكون من الممكن أن يكون لديك معايير آمنة بالكامل.

// The following works without a cast as Foo.id is a 'long' field.
List<Long> ids = session.createCriteria(Foo.class)
                        .setProjection(Foo#id)
                        .list();

// The following is a compilation error, as Foo.bar is defined as an int, and not a string
session.createCriteria(Foo.class)
       .addRestriction(Restrictions.eq(Foo#bar,"blah"))
       .list();

لقد قرأت المواصفات JPA 2.0 لمعايير الآمنة من النوع. لكنها لا تزال تفتقر إلى حد ما.

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

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

المحلول

الرمز الذي تصفه لا يستخدم الإغلاق ولكن الحرفية الميدانية (الطريقة الحرفية). مثل القديم الجيد الفصل الحرفي. هذه يمكن أن تساعد في معايير API. ال JPA 2 توليد رمز المصدر يعمل لواجهة الاستعلام الآمنة من النوع يمكن استبدالها به. لو سيكون جزءًا من JDK7.

نصائح أخرى

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

يشير الكثير من الناس إلى نيل غافتر الغامضة التي تم تراجعها بشكل غامض أو لا تصل إلى اليمين. كتلميح فيما يتعلق بما قد يتخذه إغلاق النموذج. ضع في اعتبارك أن الاقتراح المنقح يبدو (جمالياً) مثل FCM!

تتضمن هذه المواصفات نوع المراجع التي تشير إليها (ضمن "مراجع الطريقة" في السطر أعلاه) ، وبالطبع فإن FCM لديه نفس الشيء. نعم ، هذا من شأنه بالتأكيد أن يجعلك تقترح ممكنًا. فكرتي الأولى عند القراءة حول هذا الأمر كانت كيف ستؤثر على JPA/Hibernate ، و/أو طبقات التجريد الخاصة بنا حولها ، في هذا الصدد. Typesafe ، مراجع طريقة قابلة للتشكيل في معاييرك؟ إي نعم.

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