我有一个现有的数据库模式,当PK是多个字段的组合时,我尝试在JPA中建立一对多的关系,而其中只有一个是另一个实体中的FK:
DemandId :由两个字段组成的PK类
@Embeddable
public class DemandId implements Serializable {
@Column(name = "\"ORDER\"", nullable = false)
private String order;
@Column(name = "SNRP", nullable = false)
private String number;
}
DemandEntity :实体本身
@Entity
@Table(name = "DEMAND")
public class DemandEntity implements Serializable {
@EmbeddedId
private DemandId id;
@OneToMany(fetch = EAGER, cascade = ALL, mappedBy = "demand")
private Set<PartEntity> parts = new HashSet<>();
}
PartEntity :
@Entity
@Table(name = "PART")
public class PartEntity implements Serializable {
@Column(name = "SNRP")
private String number;
@ManyToOne
@JoinColumn(name = "SNRP", referencedColumnName = "SNRP", insertable = false, updatable = false)
private DemandEntity demand;
}
这种方法导致例外:
异常描述:带注释元素的@JoinColumns 来自实体类[class PartEntity]的[field demand]不完整。 当源实体类使用复合主键时,a 必须使用。为每个连接列指定@JoinColumn @JoinColumns。名称和referencedColumnName元素都必须 在每个@JoinColumn中指定。
不幸我无法添加其他加入列
@JoinColumn(name = "\"ORDER\"", referencedColumnName = "\"ORDER\"", insertable = false, updatable = false)
因为PART表不包含ORDER字段,并且无法更改数据库的结构。
有没有办法执行此类映射?
此致
答案 0 :(得分:0)
如果你有复合主键,你想要一对多 映射,我建议而不是将这些键保持为复合 主键,使它们成为复合唯一键。
并将自动生成的序列作为主键。
更好更方便。顺便提一下我的人员意见。
我甚至都不知道,如果你有可能做到这一点。