2009-04-16 10 views
5

मेरे पास क्षेत्र तालिका है:जेपीए में इकाई की समग्र कुंजी कैसे मैप करें?

REG { 
    id number, 
    dateCreation Date 
    } 

मेरे पास एक LOCALE तालिका है:

LOCALE { 
    locale String 
    } 

मेरे पास एक REGION_DESCRIPTION तालिका है:

REGION_DESCRIPTION { 
    locale String, 
    regId number, 
    description 
    } 

REGION_DESCRIPTION की एक समग्र कुंजी है: लोकेल एक विदेशी है कुंजी लेबल की ओर इशारा करते हुए कुंजी। और क्षेत्र तालिका में regId अंक।

मैं इसे अपने क्षेत्र जावा क्लास में मैप करना चाहता हूं:

private List<RegionDescription> descriptions; 

मैंने जेपीए में अलग-अलग दृष्टिकोण की कोशिश की। लेकिन मैं काम करने के लिए मानचित्रण नहीं कर सकता। कोई सुझाव?

उत्तर

2

आपके पास अपनी खुद की विशेषताओं को ले कर एक तालिका बनने (REGION_DESCRIPTION) का एक इकाई बनने का मामला है। मैं निम्नलिखित सुझाव है:

  1. समग्र प्राथमिक कुंजी वर्ग के साथ एक पूरा इकाई के रूप में RegionDescription परिभाषित करते हैं, example देखते हैं; RegionDescriptionक्षेत्र RegionDescription को और को लोकेल:

  2. RegionDescription में 2 कई-टू-वन संबंधों को परिभाषित।

  3. वैकल्पिक रूप से या अलावा RegionDescription के रास्ते आप ऊपर निर्दिष्ट मैप करने के लिए में एक-से-कई संबंधों को परिभाषित क्षेत्र

+0

उदाहरण लिंक काम नहीं कर रहा है। हो सकता है कि आप लिंक – Jyotirup

+1

@Jyotirup को अपडेट करना चाहते हैं - यहां हम http://docs.oracle.com/cd/B32110_01/web.1013/b28221/cmp30cfg001.htm पर जाएं – topchef

1

यह अपनी आवश्यकताओं को भरने चाहिए:

@Entity 
public class Region 
{ 
    @Id 
    private Long id; 
    @Temporal(TemporalType.DATE) 
    private Date dateCreation; 
    @OneToMany(mappedBy = "region") 
    @JoinColumn(name = "id", referencedColumnName = "region_id") 
    private List<RegionDescription> descriptions; 
} 

@Entity 
public class Locale 
{ 
    @Id 
    private String name; 
} 

@Entity 
public class RegionDescription 
{ 
    @EmbeddedId 
    private RegionDescriptionPK key; 

    @MapsId(value = "regionId") 
    @ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name = "region_id", referencedColumnName = "id") 
    }) 
    private Region region; 

    @MapsId(value = "localeName") 
    @ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name = "locale", referencedColumnName = "name") 
    }) 
    private Locale locale; 
} 

@Embeddable 
public class RegionDescriptionPK 
{ 
    @Column(name = "id") 
    private Long regionId; 

    @Column(name = "locale") 
    private String localeName; 
} 

एक तरफ ध्यान दें के रूप में, मैंने देखा है कि इस सवाल का काफी पुराना है। लेकिन यह किसी भी तरह से बंद नहीं है। :-)

0

यह काम करना चाहिए:

@Entity 
public class Region 
{ 
    @Id 
    private Long id; 
    @Temporal(TemporalType.DATE) 
    private Date dateCreation; 

    @OneToMany(mappedBy = "regionDescriptionPK.region") 
    private List<RegionDescription> descriptions; 
} 


@Entity 
public class RegionDescription 
{ 
    @EmbeddedId 
    private RegionDescriptionPK regionDescriptionPK;  
} 

@Embeddable 
public class RegionDescriptionPK 
{ 
    @ManyToOne 
    @JoinColumn(name = "Region_ID") 
    private Region region; 

    @ManyToOne 
    @JoinColumn(name = "locale") 
    private Locale locale; 
} 

@Entity 
public class Locale 
{ 
    @Id 
    private String name; 
} 
संबंधित मुद्दे