Sto sviluppando un'applicazione Java Desktop e utilizzando JPA per la persistenza. Ho un problema di seguito indicate:JPA - Problema di progettazione di entità
Ho due entità:
- Paese
- Città
Paese ha il seguente attributo:
- CountryName (PK)
City ha il seguente attributo:
- CityName
Ora, come ci possono essere due città con lo stesso nome in due paesi diversi, la primaryKey per la tavola Città in datbase è una chiave primaria composta composta di CityName
e CountryName
.
Ora la mia domanda è come implementare la chiave primaria della
City
comeEntity
in Java
@Entity
public class Country implements Serializable {
private String countryName;
@Id
public String getCountryName() {
return this.countryName;
}
}
@Entity
public class City implements Serializable {
private CityPK cityPK;
private Country country;
@EmbeddedId
public CityPK getCityPK() {
return this.cityPK;
}
}
@Embeddable
public class CityPK implements Serializable {
public String cityName;
public String countryName;
}
Ora, come sappiamo che il rapporto Country
-City
è OneToMany
e mostrare questo relazione nel codice precedente, ho aggiunto una variabile country
nella classe City
.
Ma poi abbiamo i dati duplicati (countryName
) memorizzati in due punti nell'oggetto City
di classe: uno nell'oggetto country
e altri nell'oggetto cityPK
.
Ma d'altra parte, sono entrambi necessari:
countryName
incityPK
oggetto è necessario perché applichiamo chiavi primarie composite in questo modo.countryName
incountry
l'oggetto è necessario perché è il modo standard di mostrare la relazione tra gli oggetti.
Come risolvere questo problema?
Si tratta di un metodo standard per gestire questo tipo di problema? Questo problema è comune in JPA? –
@Yatendra: Sì, è un modo standard (se non si usano le chiavi surrogate, come suggerisce Peter). – axtavt