【发布时间】:2017-09-17 15:07:34
【问题描述】:
我有一个现有的数据库架构,当 PK 是多个字段的组合并且其中一个是另一个实体中的 FK 时,我尝试在 JPA 中建立一对多关系:
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]不完整。 当源实体类使用复合主键时, 必须使用 @JoinColumn 为每个连接列指定 @JoinColumns。 name 和 referencedColumnName 元素都必须 在每个这样的@JoinColumn 中指定。
很遗憾我无法添加另一个连接列
@JoinColumn(name = "\"ORDER\"", referencedColumnName = "\"ORDER\"", insertable = false, updatable = false)
因为 PART 表不包含 ORDER 字段,数据库的结构无法更改。
有没有办法执行这样的映射?
问候
【问题讨论】:
-
没有意义。除非 SNRP 是唯一的,否则关系不是一对多而是多对多。
标签: java database hibernate jpa