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