Я разрабатываю приложение Java Desktop и использую JPA для сохранения. У меня есть проблема, указанных ниже:JPA - проблема с дизайном сущности
У меня есть две сущности:
- Страна
- Сити
Страна имеет следующий атрибут:
- CountryName (PK)
Город имеет следующий атрибут:
- CITYNAME
Теперь, как там может быть два города с таким же названием в двух разных странах, PrimaryKey для городской таблицы в datbase является составным первичным ключом, состоящий от 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
класса: один в country
объекте и других в cityPK
объекте.
Но с другой стороны, обе необходимы:
countryName
вcityPK
объект необходим, потому что мы реализуем составные первичные ключи в этом случае.countryName
вcountry
объект необходим, потому что это стандартный способ отображения relashionship между объектами.
Как обойти эту проблему?
Это стандартный способ решения этой проблемы? Является ли эта проблема распространенной в JPA? –
@ Yatendra: Да, это стандартный способ (если вы не используете суррогатные ключи, как предлагает Питер). – axtavt