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