JPA/Hibernate - هل مثيلات الكائنات مخزنة مؤقتًا فقط بواسطة ID؟

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

سؤال

ربما يكون هذا سؤالًا أساسيًا ، لكنه لم يتمكن من العثور على الإجابة في أي مكان في الويب.

أحاول استخدام ذاكرة التخزين المؤقت من المستوى الثاني (باستخدام Ehcache) وفحصت فقط أن بعض الكائنات تم استردادها من قاعدة البيانات في كل مرة أحاول فيها تحميلها ، كان الفرق الوحيد هو أنني لم أحصل عليها عن طريق المعرف ولكن بواسطة خاصية تحمل خاصية اسم صديق لكبار المسئولين الاقتصاديين يستخدم لإنشاء عناوين URL على النظام الذي أعمل فيه. هل JPA/Hibernate قادرة على استرداد الكائنات من ذاكرة التخزين المؤقت فقط مع معرف OBJ؟ هل هناك أي طريقة لجعلها تعمل دون الحاجة لتفعيل ذاكرة التخزين المؤقت للاستعلام؟

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

المحلول

هل JPA/Hibernate قادرة على استرداد الكائنات من ذاكرة التخزين المؤقت فقط مع معرف OBJ؟

نعم ، تعمل ذاكرة التخزين المؤقت من المستوى الثاني على الاستعلام الذي يبحث عن كائن واحد يعتمد على Id أي عند استخدام EntityManager.find() أو EntityManager.getReference() (أو المكافئ Session#get() و Session#load() من api api). AFAIK ، وهذا ينطبق على جميع تطبيقات JPA.

هل هناك أي طريقة لجعلها تعمل دون الحاجة لتفعيل ذاكرة التخزين المؤقت للاستعلام؟

مع JPA القياسية ، لا أرى أي خيار آخر غير استخدام ذاكرة التخزين المؤقت للاستعلام.

ولكن إذا كنت لا تمانع في استخدام واجهة برمجة تطبيقات Hibernate ، فقد يكون هناك بديل مع Query#iterate(). مع Query#iterate(), ، ستصدر Hibernate استعلام SQL الذي يجلب فقط المعرفات وعندما تتكرر على النتائج ، فإنه سيقوم بتحميل الكيانات المقابلة من ذاكرة التخزين المؤقت.

بشكل ملحوظ، Query#iterate() سيكون أبطأ بكثير من Query#list() إذا كنت لا تستخدم ذاكرة التخزين المؤقت من المستوى الثاني.

شخصيا ، سأستخدم ذاكرة التخزين المؤقت للاستعلام.

أنظر أيضا

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