JPA - 实体设计问题
我正在开发Java桌面应用程序并使用JPA进行持久化。我有一个问题如下:
我有两个实体:
国家
市
国家/地区具有以下属性:
国名(PK)
City具有以下属性:
城市名称
现在因为在两个不同的国家/地区可以有两个同名的城市,因此数据库中的City表的primaryKey是由
CityName
和CountryName
组成的复合主键。
现在我的问题是如何在Java中实现City
的主键作为Entity
@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
并且在上面的代码中显示了这种关系,我在City
类中添加了一个country
变量。
但是我们有重复的数据(countryName
)存储在City
class'对象的两个位置:一个在country
对象中,另一个在cityPK
对象中。
但另一方面,两者都是必要的:
cityPK
在cityPK
对象中是必要的,因为我们以这种方式实现复合主键。
country
在country
对象中是必要的,因为它是显示对象之间关系的标准方式。
如何解决这个问题?
没有找到相关结果
已邀请:
2 个回复
坝硷操
中的
应使用
标记为只读,并且两个
s应映射到同一列(使用
属性):
提孺局缎
)ID而不是自然主键 - 这可以消除整个问题。当然,这需要修改您的数据库架构,但是从您的帖子我认为这是可能的。