Я разрабатываю приложение 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 между объектами.
Как обойти эту проблему?