2015-09-11 25 views
8

मैं किसी भी समस्या के बिना वसंत डेटा आराम का उपयोग कर रहा हूं लेकिन अब मुझे एक आवश्यकता है कि जब कोई उपयोगकर्ता किसी दिए गए इकाई यानी DELETE /accounts/<id> पर एक डिलीट ऑपरेशन करता है तो मुझे डेटाबेस अंकन पर ध्वज सेट करने की आवश्यकता होती है उस इकाई को हटाए गए लेकिन मैं रिकॉर्ड रखना चाहता हूं।स्प्रिंग डेटा रेस्ट - सॉफ्ट हटाएं

असल में इसका मतलब है कि मुझे डेटाबेस में एक DELETE ऑपरेशन के बजाय एक अद्यतन करने की आवश्यकता है। मुझे डिलीट (आईडी) विधि के लिए वसंत व्यवहार को ओवरराइड करने का कोई तरीका नहीं मिला है।

कुछ कोड:

@Entity 
@Table(name = "account") 
public class Account { 

    /* 
Default value for this field is false but when a receive a 
DELETE request for this entity i want to turn this flag 
to false instead of deleting the record. 
    */ 
    @Column(name = "deleted") 
    private boolean deleted; 

... 
} 

खाता भंडार

@RepositoryRestResource 
public interface AccountRepository extends JpaRepository<Account, Integer> { 

} 

कोई भी विचार?

+1

मेरा उत्तर देखें: //stackoverflow.com/questions/19323557/handling-soft-deletes-with-spring-jpa/33168644#33168644) –

उत्तर

4

आप देखना चाहते हैं कि इसे बाहर

http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#repositories.custom-implementations

अदा कर सकता है लेकिन हटाने के लिए, कस्टम भंडार बनाने के लिए कोशिश करेंगे आप केवल जगह नहीं है ' आपको अपना तर्क बदलना होगा।

  1. अपने इकाई परिभाषा में एक अतिरिक्त ध्वज है, और हटाएं पर इसे अद्यतन: मैं 2 तरीके झंडा आवश्यकता को संभालने के लिए देखते हैं।

    इस मामले में आपको सावधान रहना होगा, और सभी मौजूदा प्रश्नों को फिर से लिखना होगा, यह सुनिश्चित करने के लिए कि हटाए गए इकाइयों को वापस नहीं किया जाएगा, और सभी भविष्य की संस्थाओं के लिए परिणामों के इस अलगाव को ध्यान में रखें। (हालांकि आप निम्न स्तर पर स्प्रिंगडाटा को हैक कर सकते हैं, और स्वचालित रूप से इस ध्वज को जोड़ सकते हैं)।

  2. मूल संग्रह से इकाई हटाएं और इसे दूसरे संग्रह में जोड़ें, जहां पूर्ण निपटान से पहले इकाइयां संग्रहीत की जाती हैं।

    इस मामले में आपको निपटान संग्रह प्रबंधित करने के लिए अतिरिक्त तर्क होना होगा, लेकिन इसका क्वेरी तर्क पर कोई प्रभाव नहीं पड़ता है। [निपटने-नरम हटाए-साथ वसंत-जेपीए] (http: आप अपने मौजूदा आवेदन के साथ एकीकृत कर सकते हैं अपने जेपीए परिभाषा को इकाई श्रोता जोड़कर (http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#jpa.auditing)

+1

धन्यवाद मैं उस वसंत ट्यूटोरियल को बनाने और उसके बाद इकाई में एक एनोटेशन @ सॉफ़्टडेलेटे का उपयोग करके ऐसा करने में सक्षम था। (http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#repositories.custom-implementations) – ejoncas

+2

हैलो ejoncas, क्या आप इस बारे में विस्तार से बता सकते हैं कि आप कैसे सक्षम थे उस एनोटेशन को स्थापित करने और इसका इस्तेमाल करने के लिए? – gtiwari333

+1

मुझे नहीं लगता कि @SoftDelete एनोटेशन अभी तक वसंत-डेटा-आम द्वारा जारी किया गया है – PRP

0

मुझे लगता है कि पहले आपको केवल उन इकाइयों की पहचान करने के लिए इंटरफ़ेस का उपयोग करना चाहिए जो सॉफ्ट डिलीट का उपयोग करेंगे। बाद में आप हटाएं विधि को ओवरराइड कर सकते हैं। अगर इकाई उस इंटरफ़ेस का उदाहरण है, तो हटाए गए ध्वज को सत्य पर सेट करें और अपडेट अपडेट करें और सुपर कार्यान्वयन को कॉल करें। JpaRepository के बजाय SimpleJpaRepository का उपयोग करें। इंटरफेस के लिए उदाहरण https://github.com/danjee/hibernate-mappings आप यहां पा सकते हैं (लगातार और DefaultPersistent)

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