Я разрабатываю настольное приложение Java и использую JPA для настойчивости. У меня проблема, указанная ниже:
У меня две сущности:
- Страна
- Город
Страна имеет следующий атрибут:
- CountryName (PK)
Город имеет следующий атрибут:
- Название города
Теперь, когда может быть два города с одинаковым названием в двух разных странах, таблица primaryKey for City в базе данных представляет собой составной первичный ключ, состоящий из CityName
и CountryName
.
Теперь мой вопрос: как реализовать первичный ключ
City
какEntity
в 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;
}
Теперь, когда мы знаем, что отношение от Country
к City
равно OneToMany
, и чтобы показать эту взаимосвязь в приведенном выше коде, я добавил переменную country
в класс City
.
Но тогда у нас есть повторяющиеся данные (countryName
), хранящиеся в двух местах объекта City
class: одно в объекте country
, а другое в объекте cityPK
.
Но с другой стороны, необходимы оба:
countryName
в объектеcityPK
необходимо, потому что мы реализуем составные первичные ключи таким образом.countryName
вcountry
объекте необходимо, потому что это стандартный способ показать взаимосвязь между объектами.
Как обойти эту проблему?