2012-07-30 25 views
25

mappedBy मानचित्र से क्या है? या, बल्कि, यह क्या नक्शा करना चाहिए?@OneToMany मैप किए गए मानचित्र _____

headers प्रति @OneToManydocs रूप @EntityFoo को नक्शे नीचे दिए गए क्षेत्र? और फिर Foojavax.mail.Header के लिए एक रैपर होगा?

package net.bounceme.dur.usenet.model; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.mail.Header; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.persistence.*; 

@Entity 
public class Articles implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private static final Logger LOG = Logger.getLogger(Articles.class.getName()); 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    @Column 
    private String subject; 

    @OneToMany(mappedBy="foo") //a wrapper for Header is needed? 
    private List<Header> headers = new ArrayList<>(); 

    public Articles() { 
    } 

    public Articles(Message message) { 
     try { 
      subject = message.getSubject(); 
     } catch (MessagingException ex) { 
      Logger.getLogger(Articles.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Articles)) { 
      return false; 
     } 
     Articles other = (Articles) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return subject; 
    } 

    public String getSubject() { 
     return subject; 
    } 

    public void setSubject(String subject) { 
     this.subject = subject; 
    } 
} 

उत्तर

27

javax.mail.Header के लिए हाँ रैपर की आवश्यकता है, सामान्य रूप से आप सीधे मनमानी कक्षाओं को जारी नहीं रख सकते हैं, खासतौर पर उन लोगों को नहीं जो Serializable नहीं हैं। इसके अलावा वे सूची के तत्व नहीं हो सकते हैं जो संस्थाओं के बीच संबंध डिजाइन करते हैं।

मैप किए गए मूल्य का क्षेत्र उस क्षेत्र का नाम है जो द्विपक्षीय संबंधों के पक्ष में है।

@OneToMany(mappedBy="article") 
private List<Foo> headers; 

अब हम जानते हैं कि इस संबंध के दूसरे छोर होना चाहिए, और यह विशेषता होती है, जो है: उदाहरण के के लिए, की कि अनुच्छेद इकाई मान एक-से-कई फू संस्था के लिए रिश्ता है देता, फू संस्था के लिए स्थित है, एक प्रकार के रूप में अनुच्छेद है और लेख नाम है:

@Entity 
public class Foo { 
... 
    @ManyToOne 
    Article article; 
} 

मालिक की ओर (फू में इस मामले लेख में) जब द्विदिश रिश्ते डेटाबेस के लिए एक समान होती है प्रयोग किया जाता है। जेपीए 2.0 विनिर्देश में यह इन शब्दों के साथ बताया गया है:

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

+2

समझने की चमक, lemme इसे आजमाएं :) – Thufir

+0

ठीक है, लेकिन मुझे 'अपवाद विवरण मिलता है: [class net.bounceme.dur.usenet.model.Articles] एक गैर-इकाई [वर्ग javax.mail.Header] का उपयोग करता है संबंध विशेषता [फ़ील्ड हेडर] में लक्षित इकाई। इसलिए मुझे उस पर पुनर्विचार करना होगा। इसके अलावा, यह बहुत से लोगों के बारे में सोचने के लिए आएगा, लेकिन मैं डेटाबेस में हर संभव शीर्षलेख नहीं चाहता - लेकिन यह सड़क से नीचे है। मुझे लगता है कि इस सवाल का जवाब है। धन्यवाद :) – Thufir

1

यहाँ की जांच:documentation

प्रासंगिक हिस्सा है:

 mappedBy 
     The field that owns the relationship. 

यह आत्म व्याख्यात्मक की तरह है। क्या आप उदाहरण चाहते हैं?

अपने Article उदाहरण के लिए कई Header वस्तुओं तो Article realationship मालिक है के बाद से लेख कई हेडर है है।

+2

किस वर्ग के क्षेत्र का क्षेत्र? – Thufir

+7

कह रहा है कि प्रलेखन पढ़ना अच्छा जवाब नहीं है! विशेष रूप से जब यह भयानक एपीआई दस्तावेज़। मैं इकाई ढांचे की सामग्री के लिए नया हूं लेकिन यहां महत्वपूर्ण बात यह है कि ** अन्य ** वर्ग –

+1

पर एक फ़ील्ड (जो आमतौर पर निजी है) से मैप किया गया है, मुझे यह भी याद नहीं है कि मुझे प्रश्न भी बहुत याद नहीं है। मैं सामान्य रूप से एक उत्तर कम नहीं करता, इसके लायक होने के लिए (यह वास्तव में एक क्रोधित जवाब होना चाहिए, जो उपरोक्त मामला नहीं है), लेकिन मुझे लगता है कि दस्तावेज़ लिंक 6 की बजाय javaee5 है।मुझे लगता है कि सिंटैक्स "स्वामित्व संबंध" मदद करता है, कि 'अनुच्छेद' स्वामित्व संबंध है। व्यक्तिगत रूप से, मुझे कभी भी आरटीएफएम लिंक नहीं लगता है, बशर्ते यह "मैनुअल" न हो, लेकिन किसी पृष्ठ या अनुभाग में। – Thufir