سؤال

أنا أستخدم Spring MVC 3.0 مع Eclipselink و JPA وأنا أواجه مشكلة التالية: لدي هذا الحقل في تطبيقي:

@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();

عندما يتم تشغيل بعض الإجراءات التي تضيف عناصر جديدة إلى تعيين عبر Set.add(), ، لا تظهر التغييرات في المتصفح ، على الرغم من أن هناك صفوفًا جديدة في قاعدة البيانات. عندما أقوم بمسح ذاكرة التخزين المؤقت للمتصفح ، لا يحدث شيء. لقد اكتشفت أن طريقة كيفية فرض قيم جديدة هي إعادة نشر التطبيق ، حتى بدون تغيير الخط الواحد. لذا فإن التطبيق يعيد القيم القديمة ، ويخزينه في مكان ما. كيف أجبره على تحميل القيم المحدثة على الإطلاق؟ كنت أفكر في شيء مثل getLastModified(), ، لكنني لا أعرف أين يجب أن أقوم بتنفيذها.

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

المحلول

نظرًا لأنها علاقة ثنائية الاتجاه ، تأكد من وضع جانبي العلاقة.

نرى،http://en.wikibooks.org/wiki/java_persistence/relationships#object_corruption.2c_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

تأكد أيضًا من أنك تتغير ودمج وارتكاب الكائنات الصحيحة.

حاول استخدام entityManager.refresh () لتحديث الكائن ، هل تحصل على القيم المحدثة؟ إذا لم تفعل ذلك ، فلا تحتوي قاعدة البيانات الخاصة بك على البيانات.

هل تقوم بالتخزين المؤقت لـ EntityManager في طلبك؟ إذا كان لديك entitymanager القديم من حوله ، فلن يرى تغييرات جديدة. عادة يجب إنشاء entityManager جديد لكل طلب/معاملة.

يحافظ Eclipselink على ذاكرة التخزين المؤقت للكائن افتراضيًا ، يمكن تعطيل ذلك باستخدام خاصية prosistence.xml ، "Eclipselink.caching.shared" = "false"

نرى،http://wiki.eclipse.org/eclipselink/examples/jpa/caching

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