الربيع MVC 3.0 التخزين المؤقت
-
04-10-2019 - |
سؤال
أنا أستخدم Spring MVC 3.0 مع Eclipselink و JPA وأنا أواجه مشكلة التالية: لدي هذا الحقل في تطبيقي:
@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();
عندما يتم تشغيل بعض الإجراءات التي تضيف عناصر جديدة إلى تعيين عبر Set.add()
, ، لا تظهر التغييرات في المتصفح ، على الرغم من أن هناك صفوفًا جديدة في قاعدة البيانات. عندما أقوم بمسح ذاكرة التخزين المؤقت للمتصفح ، لا يحدث شيء. لقد اكتشفت أن طريقة كيفية فرض قيم جديدة هي إعادة نشر التطبيق ، حتى بدون تغيير الخط الواحد. لذا فإن التطبيق يعيد القيم القديمة ، ويخزينه في مكان ما. كيف أجبره على تحميل القيم المحدثة على الإطلاق؟ كنت أفكر في شيء مثل getLastModified()
, ، لكنني لا أعرف أين يجب أن أقوم بتنفيذها.
المحلول
نظرًا لأنها علاقة ثنائية الاتجاه ، تأكد من وضع جانبي العلاقة.
تأكد أيضًا من أنك تتغير ودمج وارتكاب الكائنات الصحيحة.
حاول استخدام entityManager.refresh () لتحديث الكائن ، هل تحصل على القيم المحدثة؟ إذا لم تفعل ذلك ، فلا تحتوي قاعدة البيانات الخاصة بك على البيانات.
هل تقوم بالتخزين المؤقت لـ EntityManager في طلبك؟ إذا كان لديك entitymanager القديم من حوله ، فلن يرى تغييرات جديدة. عادة يجب إنشاء entityManager جديد لكل طلب/معاملة.
يحافظ Eclipselink على ذاكرة التخزين المؤقت للكائن افتراضيًا ، يمكن تعطيل ذلك باستخدام خاصية prosistence.xml ، "Eclipselink.caching.shared" = "false"
نرى،http://wiki.eclipse.org/eclipselink/examples/jpa/caching