我正在尝试将JPA注释添加到我的模型中。
这是我的超类的一部分:
@Entity
@Table(name="destinations")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Destination {
protected abstract Destination getParent();
protected abstract Set<Destination> getChildren();
}
这些是实施:
@Entity
@DiscriminatorValue(value = "country")
public class Country extends Destination {
private Set<Destination> regions;
private Set<Destination> cities;
@Override
public Destination getParent() {
return null;
}
@Override
public Set<Destination> getChildren() {
if (regions != null && !regions.isEmpty()) {
return regions;
}
return cities;
}
}
@Entity
@DiscriminatorValue(value = "region")
public class Region extends Destination {
private Set<Destination> cities;
private Country country;
@Override
public Destination getParent() {
return country;
}
@Override
public Set<Destination> getChildren() {
return cities;
}
}
@Entity
@DiscriminatorValue(value = "city")
public class City extends Destination {
private Country country;
private Region region;
@Override
public Destination getParent() {
if (region != null) {
return region;
}
return country;
}
@Override
public Set<Destination> getChildren() {
return null;
}
}
因此,有些国家的城市都有城市,没有区域但有城市的国家。
如何对这些类进行注释,以便它们的双向关系可以保留,并且所有目标都在一个表中?
答案 0 :(得分:0)
理想情况下,我的理解设计应该是这样的
国家&lt; ----&gt;城市
国家&lt; ----&gt;区域
城市&lt; ----&gt;地区
考虑到该区域可能存在或不存在,我们需要具有强制性的Country to City映射和与Region相关的可选映射。
现在根据您的要求,您需要将所有这些内容与Destination相关联,这意味着根据上面显示的当前设计,您将拥有多个值
例如。国家(IND) - 区(MH) - 城市(MUM);然后,您将在目的地中的2行中使用Country-City和其他Country-Region
因此,我的最终结论是,如果你选择继承设计,你将最终拥有多行,如前面的例子中所解释的那样,如果你只是使用OneToOne / OneToMany映射,如你所示的那样,对于Country持续两次城市和国家/地区