2011-03-23 10 views
10

मुझे एक भयानक डिज़ाइन के साथ विरासत डेटाबेस में जेपीए लागू करना होगा। दुर्भाग्यवश इसे बदलना संभव नहीं है। सौभाग्य से केवल पढ़ने के लिए ही पहुंच है।@ManyToMany तालिका में शामिल किए बिना (विरासत डेटाबेस)

मुझे मिली सबसे अजीब चीज़ों में से एक एक "कई से कई" संबंधों में शामिल होने के बिना (या मध्यवर्ती) तालिका है। इस तालिका संरचना का सरलीकरण है:

USER      ACCESS 
----      ------ 
ID int primary key  ID int primary key 
NAME varchar2(20)   NAME varchar2(20) 
ACCESS_GROUP int   ACCESS_GROUP int 
  • ACCESS_GROUP कॉलम दोनों तालिकाओं
  • एक उपयोगकर्ता n पहुंच
  • एक पहुंच एन उपयोगकर्ता से संबंधित हो सकता से संबंधित हो सकता में दोहराया जा सकता है
  • public class User { 
        private Integer id; 
        private String name; 
        @ManyToMany private List<Access> accessList; 
    } 
    
    public class Access { 
        private Integer id; 
        private String name; 
        @ManyToMany private List<User> userList; 
    } 
    
    :

"सैद्धांतिक रूप" इस टेबल जावा वर्गों के साथ इस तरह से मैप किया जाना चाहिए

लेकिन मुझे लगता है कि यह संभव नहीं है। जेपीए में इस टेबल तक पहुंचने और उनके माध्यम से नेविगेट करने का सबसे अच्छा तरीका आपको क्या लगता है?

+0

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

उत्तर

8

आप के रूप में दो केवल पढ़ने के लिए एक-से-कई रिश्तों यह मैप करने के लिए कोशिश कर सकते हैं: एम:

public class User { 
    @Column(name = "ACCESS_GROUP") 
    private Integer group; 

    @OneToMany 
    @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP", 
     insertable = false, updateable = false) 
    private List<Access> accessList; 
    ... 
} 

public class Access { 
    @Column(name = "ACCESS_GROUP") 
    private Integer group; 

    @OneToMany 
    @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP", 
     insertable = false, updateable = false) 
    private List<User> userList; 
    ... 
} 
+0

मैंने सफलता के बिना बहुत ही समान चीजों की कोशिश की है। शायद मेरी समस्या यह है कि मैंने दोनों तरफ "इंटीजर समूह" घोषित नहीं किया था। धन्यवाद! – sinuhepop

+0

क्या यह ACCESS_GROUP पर एक नई अनूठी बाधा नहीं डालेगा? – fireants

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