2009-12-08 6 views
6

मैं एक जेपीए (हाइबरनेट कार्यान्वयन), स्प्रिंग और स्ट्रिप्स वेब ऐप पर काम कर रहा हूं। मेरे पास कई जेपीए इकाइयां हैं जिनमें निम्नलिखित फ़ील्ड ऑडिट और क्वेरी उद्देश्यों दोनों के लिए आम हैं:बनाया गया सेटिंग और अद्यतन जेपीए इकाइयों में स्वचालित रूप से

बनाया गया - उस व्यक्ति की उपयोगकर्ता आईडी जिसने इकाई बनाई है। createdOn - तिथि इकाई updatedBy बनाया गया था - तिथि इकाई पिछले अद्यतन किया गया था

मैं अपने ऐप ताकि createdOn और updatedOn हैं काम कर रहा है - जो व्यक्ति अंतिम अपडेट इकाई updatedOn की यूजर आईडी जब इकाई जारी रहती है तो स्वचालित रूप से सेट हो जाता है लेकिन मुझे यकीन नहीं है कि मैं कैसे बनाया जा सकता हूं और अपडेट किया गया फ़ील्ड वर्तमान में लॉग इन उपयोगकर्ता आईडी के माध्यम से नियंत्रक वर्ग से डीएओ तक सभी तरह से गुजरने के बिना पॉप्युलेट किया गया है।

क्या किसी के पास कोई सुझाव है कि मैं इसे जगह पर उपयोगकर्ता आईडी पास किए बिना कैसे कर सकता हूं? ध्यान दें कि वर्तमान उपयोगकर्ता आईडी इस समय HttpSession ऑब्जेक्ट में संग्रहीत है, इसलिए मेरे बैकएंड को किसी भी तरह से इस डेटा तक पहुंचने की आवश्यकता है ...

धन्यवाद!

+0

आप इसे बनाए रखने से पहले नियंत्रक में निर्मित और अद्यतन सेट करना नहीं चाहते हैं? – yihtserns

+0

ऑब्जेक्ट गंदे की जांच के लिए आपने किस तंत्र का उपयोग किया था, इसलिए आपने 'अपडेटबी/एटी' फ़ील्ड सेट की हैं? मैंने संबंधित प्रश्न पूछा, कृपया इसे चेकआउट करें: http: // stackoverflow।कॉम/प्रश्न/20620406/कैसे-टू-सेट-उपयोगकर्ता-आईडी-ऑन-एंट्री-अपडेट – WelcomeTo

उत्तर

1

मैंने फैसला किया है कि थ्रेडलोकल शायद मेरे आवेदन में ऐसा करने का सबसे साफ तरीका है।

3

आप व्यापार परत में संदर्भ के रूप में उपयोगकर्ता ID पारित करने के लिए इन तरीकों में से एक पर एक नजर है कर सकते हैं:

(पोस्ट अभी भी प्रासंगिक हो सकता है भले ही आप ईजेबी का उपयोग नहीं कर रहे हों। दूसरी पोस्ट केवल तभी समझ में आती है जब आप जेटीए के साथ वसंत का उपयोग करते हैं)

मैं व्यक्तिगत रूप से इन्हें हतोत्साहित करता हूं दृष्टिकोण, के रूप में मैं इसके साथ दो समस्या अनुभव:

  • Testability: प्रासंगिक डेटा परीक्षण में स्थापित करने की आवश्यकता होगी
  • अनुबंध: प्रासंगिक डेटा अनुबंध इकाई का उपयोग करने में भाग लेने नहीं बल्कि स्पष्ट रूप से में दिख रहा है अंतरपटल।

उपयोगकर्ता आईडी "सभी जगह" पास करना एक बड़ी नौकरी की तरह लग सकता है, लेकिन मुझे लगता है कि यह क्लीनर है।

इकाई बनाई या अद्यतन होने पर दिनांक और उपयोगकर्ता आईडी स्वचालित रूप से सेट करने के लिए, आप EntityListener or lifecycle callbacks (शायद आप पहले से ही ऐसा कर रहे हैं) का उपयोग कर सकते हैं। आशा है कि यह मदद करता है ...

0

मैं इस तरह एक वर्ग बना सकते हैं:


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

    //getters and setters 

आपका इकाई वर्गों आवश्यकता तो आप बस इस वर्ग का विस्तार होगा वर्णन किया है है तो आप उसे आप चर सेट करते हैं परत में आपको (उदाहरण के लिए नियंत्रक) की आवश्यकता है और आपको डीएओ में सभी तरह से इसके बारे में चिंता करने की आवश्यकता नहीं है।

+0

हाँ, मेरे पास पहले से ऐसा कुछ है - मेरी समस्या यह है कि मैं नियंत्रक परत से चर को पास नहीं करना चाहता था - लेकिन ऐसा लगता है कि मुझे करना पड़ सकता है। – JMM

संबंधित मुद्दे