JPA Composite Key部分加入

时间:2017-04-20 19:53:03

标签: java database hibernate jpa

我有一个现有的数据库模式,当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字段,并且无法更改数据库的结构。

有没有办法执行此类映射?

此致

1 个答案:

答案 0 :(得分:0)

  

如果你有复合主键,你想要一对多   映射,我建议而不是将这些键保持为复合   主键,使它们成为复合唯一键。

并将自动生成的序列作为主键。

更好更方便。顺便提一下我的人员意见。

我甚至都不知道,如果你有可能做到这一点。