Tôi đang phát triển một Ứng dụng Java Desktop và sử dụng JPA để kiên trì. Tôi đã là một vấn đề đề cập dưới đây:JPA - Vấn đề thiết kế thực thể
Tôi có hai thực thể:
- Nước
- Thành phố
Nước có các thuộc tính sau:
- CountryName (PK)
City có các thuộc tính sau:
- CityName
Bây giờ là có thể có hai thành phố cùng tên ở hai quốc gia khác nhau, PrimaryKey cho bảng thành phố trong datbase là một khóa chính tổng hợp gồm của CityName
và CountryName
.
Bây giờ câu hỏi của tôi là như thế nào để thực hiện các khóa chính của
City
như mộtEntity
trong 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;
}
Bây giờ như chúng ta biết rằng mối quan hệ Country
-City
là OneToMany
và để hiển thị này mối quan hệ trong mã trên, tôi đã thêm một biến số country
trong lớp City
.
Nhưng sau đó chúng tôi có dữ liệu trùng lặp (countryName
) được lưu trữ ở hai nơi trong đối tượng City
lớp: một trong đối tượng country
và khác trong đối tượng cityPK
.
Nhưng mặt khác, cả hai đều cần thiết:
countryName
trongcityPK
đối tượng là cần thiết vì chúng tôi thực hiện khóa chính tổng hợp theo cách này.countryName
trong đối tượngcountry
là cần thiết vì đây là cách tiêu chuẩn để hiển thị sự tương tác giữa các đối tượng.
Làm thế nào để có được xung quanh vấn đề này?
Đây có phải là cách tiêu chuẩn để xử lý loại vấn đề này không? Vấn đề này có phổ biến trong JPA không? –
@ Yatendra: Vâng, đó là một cách tiêu chuẩn (nếu bạn không sử dụng khóa thay thế, như Peter gợi ý). – axtavt