Я разрабатываю приложение Java Desktop и использую JPA для сохранения. У меня есть проблема, упомянутая ниже:
У меня есть два объекта:
- Страна
- Город
Страна имеет следующий атрибут:
- CountryName (PK)
Город имеет следующий атрибут:
- CityName
Теперь, поскольку в двух разных странах могут быть два города с одинаковым именем, таблица primaryKey для города в базе данных представляет собой составной первичный ключ, состоящий из 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
объект необходим, потому что это стандартный способ отображения relashionship между объектами.
Как обойти эту проблему?