Zajmuję się tworzeniem aplikacji Java Desktop i używanie JPA do utrwalania. Mam problem wymienione poniżej:JPA - Problem z projektem jednostki
Mam dwa podmioty:
- Kraj
- Miasto
Kraj ma następujący atrybut:
- COUNTRYNAME (PK)
City posiada następujące atrybuty:
- cityname
Teraz jak nie może być dwóch miast o tej samej nazwie w dwóch różnych krajach, primaryKey na stole miasta w datbase jest kompozytowa klucz podstawowy składa z CityName
i CountryName
.
Teraz moje pytanie brzmi: Jak wdrożyć klucz podstawowy z
City
jakoEntity
w Javie
@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;
}
Teraz jak wiemy, że relacje z Country
do City
jest OneToMany
i pokazać to w powyższym kodzie dodałem zmienną country
w klasie City
.
Ale wtedy mamy zduplikowane dane (countryName
) przechowywanych w dwóch miejscach na obiektu City
klasy: jedna w obiekcie country
i innych w obiekcie cityPK
.
Ale z drugiej strony, obie są konieczne:
countryName
wcityPK
obiekt jest konieczne, ponieważ realizujemy klucze złożone w ten sposób.countryName
wcountry
przedmiotu jest konieczna, ponieważ jest to standardowy sposób pokazano relashionship między przedmiotami.
Jak obejść ten problem?
Czy jest to standardowy sposób radzenia sobie z tego typu problemami? Czy ten problem jest powszechny w WZP? –
@ Yatendra: Tak, jest to standardowy sposób (jeśli nie używasz kluczy zastępczych, jak sugeruje Peter). – axtavt