2009-08-15 6 views
176

मैं अनिवार्य रूप से एक "@Ignore" प्रकार एनोटेशन की तलाश में हूं जिसके साथ मैं एक विशेष क्षेत्र को जारी रखने से रोक सकता हूं। यह कैसे हासिल किया जा सकता है?जेपीए दृढ़ता के दौरान एक क्षेत्र को अनदेखा करने का सबसे तेज़ तरीका?

उत्तर

310

@Transient आपकी आवश्यकताओं का अनुपालन करता है।

+10

लेकिन फिर JSON JSON में कनवर्ट करते समय क्षेत्र को क्रमबद्ध नहीं करेगा ... कैसे हल करें? – MobileMon

+0

जो आपके ऐप desing पर निर्भर करता है।यदि आप अपनी इकाई वर्ग को एनोटेट करते हैं - यह हर जगह लागू होता है; लेकिन यदि आप दाओ को एंटीट करते हैं जो इकाई का उपयोग करते हैं - यह एक और कहानी है। संक्षेप में: डीएओ का उपयोग करें जब आपके पास एकाधिक स्टोरेज – Sarief

+0

@MobileMon जैक्सन – user3871754

18

किसी फ़ील्ड को अनदेखा करने के लिए, इसे @Transient के साथ एनोटेट करें ताकि इसे हाइबरनेट द्वारा मैप नहीं किया जाएगा।
स्रोत: Hibernate Annotations

14

यह उत्तर थोड़ा देर से आता है, लेकिन यह प्रतिक्रिया को पूरा करता है।

आदेश एक इकाई से कोई फ़ील्ड से बचने के लिए डीबी एक में कायम किए जाने की दो तंत्रों में से एक का उपयोग कर सकते हैं:

@Transient - जेपीए एनोटेशन एक क्षेत्र के रूप में अंकन persistable नहीं

transient कीवर्ड जावा में सावधान रहें - इस कीवर्ड का उपयोग करके, जावा से किसी भी धारावाहिक तंत्र के साथ क्षेत्र को उपयोग करने से रोका जाएगा। इसलिए, यदि फ़ील्ड को क्रमबद्ध किया जाना चाहिए तो आप बेहतर @ ट्रांसिएंट एनोटेशन का बेहतर उपयोग करेंगे।

+0

कैसे मैं बस विधि प्राप्त करने पर दृढ़ता को अनदेखा करना चाहता हूं? उदाहरण के लिए: myjparepository.save() मॉडल को सामान्य रूप से सहेजने के लिए, और myjparepository.find (id) उस फ़ील्ड को अनदेखा कर देगा जो मैं चाहता हूं? – xtiger

+0

कोई विचार नहीं है कि यह संभव है। क्षमा करें –

2

ऊपर जवाब पूरा करने के लिए, मैं एक XML मैपिंग फ़ाइल का उपयोग करते हुए जहां न तो @Transient है और न ही transient काम किया मामला था ... मैं xml फ़ाइल में क्षणिक जानकारी डाल करने के लिए किया था:

<attributes> 
(...) 
    <transient name="field" /> 
</attributes> 
40

करने के लिए एक क्षेत्र को अनदेखा करें, इसे @Transient के साथ एनोटेट करें ताकि इसे हाइबरनेट द्वारा मैप नहीं किया जाएगा।

लेकिन फिर जैक्सन JSON में कनवर्ट करते समय क्षेत्र को क्रमबद्ध नहीं करेगा।

आप JSON साथ जेपीए मिश्रण की जरूरत है (जेपीए द्वारा छोड़ देते हैं, लेकिन अभी भी जैक्सन में शामिल हैं) @JsonInclude का उपयोग करें:

@JsonInclude() 
@Transient 
private String token; 

तुम भी अक्रमांकन दौरान JSON में JsonInclude.Include.NON_NULL का उपयोग करें और क्षेत्रों को छुपा सकते हैं जब token == null:

@JsonInclude(JsonInclude.Include.NON_NULL) 
@Transient 
private String token; 
+1

मैं जेएक्स-आरएस 2.0.1/जर्सी 2.25.1/जैक्सन 2.8.7 चला रहा हूं और उस स्टैक के साथ '@ जेसन इनक्लेयर 'आवश्यक नहीं है:' @ क्षणिक' फ़ील्ड अभी भी JSON में शामिल हैं। (आपको अभी भी मेरा वोट मिला है: तकनीक अन्य परिस्थितियों में बहुत उपयोगी हो सकती है)। – DKroot

1

हाइबरनेट 5.2.10, जर्सी 2.25.1 और जैक्सन 2.8.9 का उपयोग करके उपर्युक्त उत्तरों में से कोई भी मेरे लिए काम नहीं करता है। अंततः मुझे जवाब मिला (जैसे, वे हाइबरनेट 4 मॉड्यूल का संदर्भ देते हैं लेकिन यह 5 के लिए भी काम करता है) here। जेसन एनोटेशन में से कोई भी @Transient पर काम नहीं करता था। स्पष्ट रूप से जैक्सन 2 @Transient के साथ चिह्नित सामग्री को अनदेखा करने के लिए पर्याप्त 'स्मार्ट' है, जब तक कि आप इसे स्पष्ट रूप से नहीं बताते।

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-hibernate5</artifactId> 
    <version>2.8.9</version> 
</dependency> 
:

ObjectMapper jacksonObjectMapper = new ObjectMapper(); 
Hibernate5Module jacksonHibernateModule = new Hibernate5Module(); 
jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION); 
jacksonObjectMapper.registerModule(jacksonHibernateModule); 

यहाँ Hibernate5Module के लिए निर्भरता है: कुंजी hibernate5 मॉड्यूल (जो मैं अन्य हाइबरनेट एनोटेशन से निपटने के लिए उपयोग कर रहा था) जोड़ सकते हैं और मेरी जर्सी आवेदन में USE_TRANSIENT_ANNOTATION सुविधा को अक्षम करने के लिए था

+0

हर दूसरे विधि से ऊपर उल्लेख की कोशिश कर रहा है और दूसरों के '@ JsonProperty' ' बाद @ JsonInclude' '@JsonSerialize + @ JsonDeserialize'' mapper.configure (MapperFeature.PROPAGATE_TRANSIENT_MARKER, झूठी)); ' इस समाधान अंत में काम किया। धन्यवाद! – Aceonline

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