2012-01-30 12 views
9

क्या मानक जेपीए 2 के साथ संबंधित इकाई तालिका के एक फ़ील्ड में पूर्णांक की एक सूची स्टोर करना संभव है?जेपीए: एक फ़ील्ड में पूर्णांक की एक सूची

कुछ की तरह:

@Entity 
@Table(name="tbl_myentities") 
public class MyEntity { 

    @ElementaryCollection 
    @Column(name="vals") // in table tbl_myentities 
    private List<Integer> vals; 

धन्यवाद

उत्तर

6

यह एक क्षेत्र में एक से अधिक मान स्टोर करने के लिए संभव नहीं है। एक ही क्षेत्र में उन्हें स्टोर करने का कारण क्या है?

एक तरीका प्रकार स्ट्रिंग के एक क्षेत्र का उपयोग करने के लिए और एक अल्पविराम पृथक सूची में वहाँ सभी पूर्णांकों जोड़ सकते हैं और में शामिल होने/getters और setters में विस्फोट हो सकता है:

private String vals; 

public setVals(int vals[]) 
{ 
    // this.vals = Iterate vals[] and create a comma separated string 
} 

public int[] getVals() 
{ 
    // vals.split(",") to get a list of Strings, then typecast/parse them to ints before returning 
} 

@ElementCollection एनोटेशन का उपयोग करना और @CollectionTable नियंत्रित करने के लिए मैपिंग में मान संग्रहीत करने के लिए एक अलग तालिका की आवश्यकता है।

@ElementCollection 
private Collection<Integer> integers; 

पर तत्व समूह के बारे में और अधिक पढ़ें पर http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection

इसी प्रकार का प्रश्न यहां Does JPA @ElementCollection annotation always produce an one-to-many relationship?

+1

यह कहता है, "एलिमेंट कोलेक्शन मान हमेशा एक अलग तालिका में संग्रहीत होते हैं।" –

+0

मुझे नहीं लगता कि यह ओपी चाहता था। – Kent

1

मुझे नहीं लगता कि यह संभव है। क्योंकि आपके पास डेटाबेस तालिका में कोई कॉलम नहीं हो सकता है जो आपको पूर्णांक की सूची संग्रहीत करने की अनुमति देता है।

आप क्या कर सकते पूर्णांकों की सूची के बजाय एक स्ट्रिंग प्रकार फ़ील्ड का उपयोग है -

@Column(name="vals") // in table tbl_myentities 
private String vals; 

और पूर्णांकों की सूची से स्ट्रिंग के लिए रूपांतरण करते हैं और आप अपनी इकाई को बचाने वापस मैन्युअल रूप से पहले और बाद में आप पढ़ लिया है आपकी इकाई

1

शायद एक @ लॉब आप के अनुरूप हो सकता है? (के बावजूद यह क्या मतलब)

@Lob 
ArrayList<String> vals; 

(ध्यान दें कि आपके संग्रह को स्पष्ट रूप से एक ArrayList होना चाहिए)

+0

@Wingie क्या आपके गेटर/सेटर भी स्पष्ट रूप से ArrayList के लिए हैं? –

1

आप एक स्ट्रिंग फ़ील्ड में सभी Vals, एक अल्पविराम से अलग हो गए और परिवर्तन जुड़े गेटर और सेटर स्टोर कर सकते हैं इस तरह:

public List<Integer> getVals() { 
    List<Integer> lstVals = new ArrayList<Integer>(); 
    int val = 0; 

    for(String field : this.vals.split(",")) { 
     try { 
      val = Integer.parseInt(field); 
     } 
     // If the String contains other thing that digits and commas 
     catch (NumberFormatException e) { 
     } 
     lstVals.add(val); 
    } 

    return lstVals; 
} 

public void setVals(List<Integer> vals) { 
    String newVals = ""; 
    for(int i : vals) { 
     newVals.concat(String.valueOf(i)); 
    } 
    this.vals = newVals; 
} 
संबंधित मुद्दे