gpt4 book ai didi

java - JPA - 实体设计问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:51 24 4
gpt4 key购买 nike

我正在开发 Java 桌面应用程序并使用 JPA 进行持久化。我有下面提到的问题:

我有两个实体:

  • 国家
  • 城市

国家有以下属性:

  • 国家名称(PK)

城市有以下属性:

  • 城市名

现在两个不同的国家可以有两个同名的城市,数据库中City表的主键是一个复合主键,由CityNameCountryName组成.

Now my question is How to implement the primary key of the City as an Entity in 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;
}

现在我们知道从 CountryCity 的关系是 OneToMany 并且为了在上面的代码中显示这种关系,我添加了City 类中的 country 变量。

但是我们在 City 类对象的两个地方存储了重复数据(countryName):一个在 country 对象中, other 在 cityPK 对象中。

但另一方面,两者都是必要的:

    cityPK 对象中的
  • countryName 是必需的,因为我们以这种方式实现复合主键。

  • country 对象中的
  • countryName 是必需的,因为它是显示对象之间关系的标准方式。

如何解决这个问题?

最佳答案

CityPK 中的

countryName 应使用 @Column(insertable = false, updatable = false) 标记为只读countryName 应映射到同一列(使用 name 属性):

  @Entity
public class City implements Serializable {
@EmbeddedId
private CityPK cityPK;

@ManyToOne
@JoinColumn(name = "countryName")
private Country country;
}


@Embeddable
public class CityPK implements Serializable {
public String cityName;

@Column(name = "countryName", insertable = false, updatable = false)
public String countryName;
}

关于java - JPA - 实体设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2562746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com