سؤال

أنا أعمل على تطبيق JPA (تنفيذ السبات ل) تطبيق Web Spring and Stripes. لدي عدد من كيانات JPA التي لها الحقول التالية المشتركة لأغراض التدقيق والاستعلام:

createdby - معرف المستخدم للشخص الذي خلق الكيان. CreatedOn - تاريخ إنشاء الكيان المحترم - معرف المستخدم للشخص الذي تم تحديثه آخر عنوان الكيان - تاريخ آخر تحديث

لقد حصلت على تطبيقي يعمل بحيث يتم تعيين تطبيق Createron والمحترم تلقائيا عند استمرار الكيان، لكنني لست متأكدا من كيفية الحصول على الحقول المحدثة والمحدثة دون الحاجة إلى المرور عبر معرف المستخدم المسجل حاليا على طول الطريق من فئة وحدة التحكم إلى DAOS.

هل لدى أي شخص أي اقتراحات حول كيفية القيام بذلك دون اجتياز userids في كل مكان؟ لاحظ أنه يتم تخزين معرف المستخدم الحالي في كائن httpsession في الوقت الحالي، لذلك يحتاج الواجهة الخلفية إلى الوصول إلى هذه البيانات بطريقة أو بأخرى ...

شكرا!

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

المحلول 2

لقد قررت أن ThreadLocal هو ربما أنظف طريقة للقيام بذلك في طلبي.

نصائح أخرى

يمكنك إلقاء نظرة على أحد هذه الأساليب لتمرير معرف المستخدم كسياق في طبقة العمل:

(قد لا تزال الوظائف ذات صلة حتى لو كنت لا تستخدم EJB. المشاركة الثانية منطقية ولكن فقط إذا كنت تستخدم الربيع مع JTA)

أنا شخصيا تثبيط هذه النهج، كما أتصور مشكلة في ذلك:

  • الاستقرار: سيتم إعداد البيانات السياقية في الاختبار
  • العقد: تشارك البيانات السياقية في العقد لاستخدام الكيان ولكنه غير مرئي بوضوح في الواجهة.

قد يبدو تمرير المستخدم "في كل مكان" وكأنه وظيفة كبيرة، لكنني أعتقد أنه نظيف.

لتعيين التاريخ ومعرف المستخدم تلقائيا عند إنشاء الكيان أو التحديث، يمكنك استخدام EntityListener أو ردود الاحصلات في دورة حياة (ربما كنت تفعل ذلك بالفعل). آمل أن يساعد ...

سأخلق فئة مثل هذا:


@MappedSuperclass
public abstract class AuditableDomainClass {
  private long createdBy;
  private long updatedBy;

  //getters and setters

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

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