我在 JPA 2/Hibernate 中获取复合主键和外键时遇到问题。我正在尝试创建一个包含国家和省份的简单场景:
国家实体:
@Entity
@Table(name = "country")
public class Country extends DomainObjectBase implements Serializable {
@Id
@Basic(optional = false)
@Column(name = "code")
private String code;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "country")
private List<Province> provinces;
}
省份主键:
@Embeddable
public class ProvincePK implements Serializable {
@Basic(optional = false)
@Column(name = "code")
private String code;
@Basic(optional = false)
@Column(name = "country_code")
private String countryCode;
}
省份实体:
@Entity
@Table(name = "province")
public class Province extends DomainObjectBase implements Serializable {
@EmbeddedId
protected ProvincePK provincePK;
@MapsId("country_code")
@JoinColumn(name = "country_code", referencedColumnName = "code", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Country country;
}
这为我创建了正确的表格,但有一个例外:
国家表:
- code PK
- ...
省份表
- 代码 PK FK -这就是问题所在,它创建了对国家/地区表的代码列的外键引用
- 国家代码 FK这是我想要的唯一外键参考
- ...
如何映射休眠的实体/复合键以生成我想要的架构?现在我无法将任何数据插入省份,因为它期望该国家/地区包含省份代码!
谢谢你的帮助。
尝试这个。我发现当我使用这样的数据模型时它对我有用。
@Entity
@Table(name = "province")
@IdClass(ProvincePK.class)
public class Province extends DomainObjectBase implements Serializable {
@Id
@Basic(optional = false)
@Column(name = "code")
private String code;
@Id
@Basic(optional = false, insertable = false, updatable = false)
@Column(name = "country_code")
private String countryCode;
@JoinColumn(name = "country_code", referencedColumnName = "code")
@ManyToOne
private Country country;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)