2016-03-20 14 views
14

क्या स्प्रिंग डेटा रेस्ट के साथ एक ही जेपीए इकाई के लिए दो अलग-अलग भंडार प्रकाशित करना संभव है? मैंने दो रिपोजिटरी को अलग-अलग पथ और रिला-नाम दिए, लेकिन इनमें से केवल एक ही आरईएसटी एंडपॉइंट के रूप में उपलब्ध है। बिंदु मैं दो रिपोजिटरी क्यों कर रहा हूं, उनमें से एक एक अंश है, जो केवल एक इकाई के मूल क्षेत्रों को दिखाता है।वसंत डेटा आराम में समान इकाई के लिए एकाधिक रेपॉजिटरीज

+1

यह संभव नहीं है। स्प्रिंग डेटा आरईएसटी के साथ एक प्रबंधित संसाधन एक इकाई एक भंडार नहीं है। लाइब्रेरी प्रबंधित संसाधनों का 'मानचित्र' रखती है जहां कुंजी इकाई वर्ग है। इसलिए, इकाई को एक समय में केवल एक भंडार इंटरफ़ेस में मैप किया जा सकता है (चूंकि 'मानचित्र' कुंजी के लिए केवल एक मान रख सकता है)। यदि आपके आवेदन के लिए प्रति इकाई वर्ग में एकाधिक भंडार रखने के लिए यह महत्वपूर्ण है, तो आप स्प्रिंग डेटा टीम के साथ एक वृद्धि अनुरोध बढ़ा सकते हैं। – manish

+0

मल्टीमैप्स हैं। तकनीकी रूप से निश्चित रूप से कोई बाधा नहीं है। एक सैद्धांतिक दृष्टिकोण से, हमारे उपयोग के मामलों में, एक संसाधन के साथ एक संसाधन की पहचान नहीं की जा सकती बल्कि एक डीबी के अर्थ में। दृश्य स्प्रिंग डेटा रेस्ट में अनुमानों के अनुरूप हैं। तो यह बहुत अच्छा होगा अगर मैं उन पर अनुमानों और संचालन को संसाधनों पर मैप कर सकता हूं। – Gregor

+0

मेरी टिप्पणी [वास्तविक वसंत डेटा आरईएसटी कार्यान्वयन] पर आधारित थी (https://github.com/spring-projects/spring-data-rest/blob/master/spring-data-rest-core/src/main/java /org/springframework/data/rest/core/config/ResourceMappingConfiguration.java)। मुझे पता है कि 'मल्टीमैप' जैसी संरचनाएं हैं, यही कारण है कि मैंने सुझाव दिया कि आप स्प्रिंग डेटा टीम के साथ एक वृद्धि अनुरोध को बढ़ाने पर विचार करें। – manish

उत्तर

1

उत्तर ऐसा लगता है: प्रति इकाई केवल एक भंडार संभव है।

8

भयानक हिस्सा न केवल आप ही इकाई प्रति 1 वसंत डेटा बाकी भंडार (@RepositoryRestResource), लेकिन भी है कि यदि आप एक नियमित रूप से जेपीए @Repository (CrudRepository या PagingAndSorting की तरह) यह भी साथ बातचीत करेंगे हो सकता है वसंत डेटा एक आराम (जैसा कि मानचित्र में कुंजी स्वयं इकाई है)। एक या दूसरे के यादृच्छिक भार को डिबग करने में कुछ घंटों खो गए। मुझे लगता है कि अगर यह वसंत डेटा आराम की एक कठिन सीमा है तो कम से कम एक अपवाद को फेंक दिया जा सकता है यदि मूल्य को ओवरराइड करने का प्रयास करते समय मानचित्र की कुंजी पहले से मौजूद है।

+0

मैंने इसके लिए एक जिरा मुद्दा बनाया: https://jira.spring.io/browse/DATAREST-923 इसे वोट करने के लिए स्वतंत्र महसूस करें! – Tim

+0

एक अच्छा उपयोग करने वाला क्या होगा ताकि आपको दो भंडारों की आवश्यकता हो? – Tim

+0

उदाहरण का उपयोग केस: जेपीए में स्टोर + खोज के लिए लोचदार खोज रेपो का उपयोग करें – aux

0

तो, यह सीधे सवाल का जवाब नहीं देता है, लेकिन अंतर्निहित मुद्दे को हल करने में मदद कर सकता है।

आपके पास प्रति इकाई केवल एक भंडार हो सकता है ... हालांकि, आपके पास प्रति तालिका एकाधिक इकाइयां हो सकती हैं; इस प्रकार, प्रति टेबल एकाधिक भंडार होने।

कोड मैंने लिखा का एक सा में, मैं दो संस्थाओं ... एक पूर्व निर्धारित आईडी के साथ एक स्वत: जनरेट आईडी के साथ एक और एक अन्य बनाने के लिए किया था, लेकिन दोनों एक ही मेज की ओर इशारा करते:

@Entity 
@Table("line_item") 
public class LineItemWithAutoId { 

    @Id 
    @GeneratedValue(generator = "system-uuid") 
    @GenericGenerator(name = "system-uuid", strategy = "uuid") 
    private String id; 

    ... 
} 



@Entity 
@Table("line_item") 
public class LineItemWithPredefinedId { 

    @Id 
    private String id; 

    ... 
} 

फिर, मेरे पास प्रत्येक के लिए एक भंडार था:

public interface LineItemWithoutId extends Repository<LineItemWithAutoId,String> { 

    ... 

} 


public interface LineItemWithId extends Repository<LineItemWithPredefinedId,String> { 

    ... 

} 

पोस्ट की गई समस्या के लिए, आपके पास दो इकाइयां हो सकती हैं। सबकुछ के लिए गेटर्स और सेटर्स के साथ एक पूर्ण इकाई होगी। दूसरा, वह इकाई होगी, जहां सब कुछ के लिए सेटर्स हैं, लेकिन केवल उन फ़ील्ड के लिए गेटर्स जिन्हें आप सार्वजनिक करना चाहते हैं। इसका कोई मतलब भी है क्या?

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