I am trying to build a entity structure where I have a country table that uses 
ISO 3166 country codes as their PK, and a region table which also uses ISO3166 
codes as a composite PK. For example.. a record in the country_region table 
that refers to New South Wales in Australia will have a primary key of:

country_code_1 = AU (FK value for country table)
region_code = NS


So in summary I have a CountryRegion table that has a many(regions) to 
one(country) relationship with a Country table. The key for the CountryRegion 
table is a composite of the country code and the region code. 

I have referred to the wiki for this but am still a bit stuck on how to make 
this work.

I'll paste my code below.. If anyone could please look over an give me pointers 
as to where I'm going wrong I would be very grateful.

I have a Country entity, a CountryRegion entity, and an embeddable PK object 
called CountryRegion


The CountryRegion entity:

  | import java.io.Serializable;
  | import javax.persistence.EmbeddedId;
  | import javax.persistence.Entity;
  | 
  | import javax.persistence.*;
  | 
  | //import java.util.List;
  | 
  | @Entity
  | @Table(name = "country_region")
  | public class CountryRegion implements Serializable {
  | 
  |     java.lang.String name;
  | 
  |     java.lang.String description;
  | 
  |     CountryRegionPK pk;
  | 
  |     public CountryRegion() {
  |     }
  | 
  |     @EmbeddedId
  |     @AttributeOverrides({
  |          @AttributeOverride(name = "regionCode", column = @Column(name = 
"region_code")),
  |          @AttributeOverride(name = "country", column = 
@Column(name="country_code_1"))
  |        })
  |     public CountryRegionPK getPk() {
  |             return pk;
  |     }
  | 
  |     public void setPk(CountryRegionPK pk) {
  |             this.pk = pk;
  |     }
  | 
  |     @Column(name = "description")
  |     public java.lang.String getDescription() {
  |             return description;
  |     }
  | 
  |     public void setDescription(java.lang.String description) {
  |             this.description = description;
  |     }
  | 
  |     @Column(name = "name")
  |     public java.lang.String getName() {
  |             return name;
  |     }
  | 
  |     public void setName(java.lang.String name) {
  |             this.name = name;
  |     }
  | 
  | }
  | 

The Country entity:


  | import java.io.Serializable;
  | 
  | import javax.persistence.*;
  | 
  | @Entity
  | @Table(name="country")
  | public class Country  implements Serializable {
  | 
  |     java.lang.String countryCode1;
  |     
  |     java.util.List<Location> locations;
  |     
  |     java.util.List<CountryRegion> countryRegion;
  | 
  |     @Id
  |     @Column(name="country_code_1")
  |     public java.lang.String getCountryCode1() {
  |             return countryCode1;
  |     }
  | 
  |     public void setCountryCode1(java.lang.String countryCode1) {
  |             this.countryCode1 = countryCode1;
  |     }
  | 
  | 
  |     @OneToMany(fetch=FetchType.LAZY,mappedBy="country")
  |     public java.util.List<Location> getLocations() {
  |             return locations;
  |     }
  | 
  |     public void setLocations(java.util.List<Location> locations) {
  |             this.locations = locations;
  |     }
  | 
  |     @OneToMany(fetch=FetchType.LAZY,mappedBy="country")
  |     public java.util.List<CountryRegion> getCountryRegion() {
  |             return countryRegion;
  |     }
  | 
  |     public void setCountryRegion(java.util.List<CountryRegion> 
countryRegion) {
  |             this.countryRegion = countryRegion;
  |     }
  | 
  | 
  | 
  | 
  | }
  | 

The Embedded primary key object:



  | 
  | import javax.persistence.Embeddable;
  | 
  | 
  | @Embeddable
  | public class CountryRegionPK implements java.io.Serializable{
  | 
  | 
  | 
  |     private Country country;
  |    private String regionCode;
  |     
  |    public CountryRegionPK() {
  |             super();
  |             // TODO Auto-generated constructor stub
  |     }
  |     
  |    public CountryRegionPK(String regionCode, Country country)
  |    {
  |       this.regionCode = regionCode;
  |       this.country = country;
  |    }
  | 
  |    public Country getCountry()
  |    {
  |       return country;
  |    }
  | 
  |    public void setCountry(Country country)
  |    {
  |       this.country = country;
  |    }
  | 
  |    public String getRegionCode()
  |    {
  |       return regionCode;
  |    }
  | 
  |    public void setRegionCode(String regionCode)
  |    {
  |       this.regionCode = regionCode;
  |    }
  | 
  |    public int hashCode()
  |    {
  |       return (int) country.hashCode() + regionCode.hashCode();
  |    }
  | 
  |    public boolean equals(Object obj)
  |    {
  |       if (obj == this) return true;
  |       if (!(obj instanceof CountryRegionPK)) return false;
  |       if (obj == null) return false;
  |       CountryRegionPK pk = (CountryRegionPK) obj;
  |       return pk.country.equals(country) && pk.regionCode.equals(regionCode);
  |    }
  | 


An example of a referring entity (Location)


  | import java.io.Serializable;
  | 
  | import javax.persistence.*;
  | 
  | @Entity
  | @Table(name="location")
  | public class Location implements Serializable{
  | 
  |     
  |     java.lang.Integer locationId;
  | 
  |     java.lang.String city;
  | 
  |     java.lang.String postalCode;
  | 
  |     CountryRegion countryRegion;
  | 
  |     Country country;
  |     
  |     java.util.Date creationDate;
  |     
  |     @Column(name="creation_date",nullable=false,updatable=false)
  |     public java.util.Date getCreationDate() {
  |             return creationDate;
  |     }
  | 
  |     public void setCreationDate(java.util.Date creationDate) {
  |             this.creationDate = creationDate;
  |     }
  |     
  |     @Id(generate = GeneratorType.AUTO)
  |     @Column(name="location_id")    
  |     public java.lang.Integer getLocationId() {
  |             return locationId;
  |     }
  | 
  |     public void setLocationId(java.lang.Integer locationId) {
  |             this.locationId = locationId;
  |     }
  |     
  |     @Column(name="city")  
  |     public java.lang.String getCity() {
  |             return city;
  |     }
  | 
  |     public void setCity(java.lang.String city) {
  |             this.city = city;
  |     }
  | 
  |     @ManyToOne
  |     @JoinColumn(nullable=false, name="country_code_1")
  |     public Country getCountry() {
  |             return country;
  |     }
  | 
  |     public void setCountry(Country country) {
  |             this.country = country;
  |     }
  | 
  |     @ManyToOne(fetch=FetchType.EAGER)
  |     @JoinColumns ( [EMAIL PROTECTED](nullable=false, name="region_code"), 
  | @JoinColumn(nullable=false, name="country_code_1")})
  |     public CountryRegion getCountryRegion() {
  |             return countryRegion;
  |     }
  | 
  |     public void setCountryRegion(CountryRegion countryRegion) {
  |             this.countryRegion = countryRegion;
  |     }
  | 
  | 
  |     @Column(name="postal_code")  
  |     public java.lang.String getPostalCode() {
  |             return postalCode;
  |     }
  | 
  |     public void setPostalCode(java.lang.String postalCode) {
  |             this.postalCode = postalCode;
  |     }
  | 
  | }
  | 
  | 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3914683#3914683

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3914683


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to