Je développe une application Java Desktop et utilise JPA pour la persistance. J'ai un problème mentionné ci-dessous:JPA - Problème de conception d'entité
J'ai deux entités:
- Pays
- Ville
Pays a l'attribut suivant:
- CountryName (PK)
Ville a l'attribut suivant:
- CityName
Maintenant, comme il peut y avoir deux villes avec le même nom dans deux pays différents, la primaryKey pour la table de la ville dans la datbase est une clé primaire composite composé de CityName
et CountryName
.
Maintenant, ma question est de savoir comment mettre en œuvre la clé primaire de la
City
commeEntity
en 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;
}
Maintenant que nous savons que la relation Country
-City
est OneToMany
et de montrer cette relation dans le code ci-dessus, j'ai ajouté une variable country
dans la classe City
.
Mais nous avons des données en double (countryName
) stockées dans deux endroits dans l'objet de classe City
: un dans l'objet country
et d'autres dans l'objet cityPK
.
Mais d'autre part, les deux sont nécessaires:
countryName
danscityPK
objet est nécessaire parce que nous mettons en œuvre les clés primaires composites de cette façon.countryName
danscountry
objet est nécessaire parce que c'est la manière standard de montrer relashionship entre les objets.
Comment contourner ce problème?
Est-ce une façon standard de traiter ce type de problème? Ce problème est-il courant dans JPA? –
@Yatendra: Oui, c'est un moyen standard (si vous n'utilisez pas de clés de substitution, comme le suggère Peter). – axtavt