سؤال

لدي أسلوب إرجاع الكثير من البيانات التي يجب استخدامها @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) لهذا الأسلوب.طريقة إجراء JPA الاستعلام على الكثير المحتوى الكامل من الجدول (حوالي 1000 الصفوف).

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

المحلول

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

ونحن دائما لا تستخدم أبدا عن الأساليب التي بذل المزيد من المعالجة بحيث المطورين يدركون الحق قبالة الخفافيش ليس من أجل الدعوة إذا كانت طرفا في الصفقة بالفعل. نأمل أن يساعد.

نصائح أخرى

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

وبقدر ما أعرف (على الأقل هذا هو الحال مع السبات)، لا يمكنك استخدام JPA خارج معاملة كما يرتبط دورة حياة إدارة المنشأة على دورة حياة المعاملة و. لذلك يجب أن تكون الطريقة الفعلية التي لا الاستعلام المعاملات.

ومع ذلك، يمكنك تعيين إلى TransactionAttributeType.REQUIRES_NEW. هذا من شأنه وقف أي صفقة القائمة، تبدأ من جديد، ووقفها عند إرجاع الأسلوب. وهذا يعني أن يتم فصل كل ما تبذلونه من الكيانات في الوقت الذي تصل المتصل، وهو ما يبدو وكأنه كنت تحاول تحقيق.

في المزيد من الأنظمة المعقدة، فإنه يدفع إلى فصل تماما طبقة البيانات من طبقة رجال الأعمال وإنشاء مجموعة جديدة من وجوه. عاد طريقة الخاص بك وسوف ثم استدعاء الاستعلام JPA، ثم استخدام كيانات لتجميع الكائنات من طبقة عملك، والعودة تلك. بهذه الطريقة المتصل لا يمكن أبدا أن يضعوا أيديهم على الكيانات JPA الفعلية وأنت حر في أن يفعل في طبقة البيانات الخاصة بك ما تريد، منذ الآن انها مجرد تفصيل تطبيق. (هيك، هل يمكن تغيير استدعاء قاعدة بيانات لدعوة API النائية، وسوف يتصل بك ليس من الضروري أن تعرف.)

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