【问题标题】:JPA Composite Key part joinJPA 组合键部分连接
【发布时间】: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


【解决方案1】:

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

并制作一个自动生成的序列作为主键。

更好更方便。顺便说一下,这是我个人的意见。

我什至不知道,如果你想这样做是否可能。

【讨论】:

    猜你喜欢
    • 2015-09-27
    • 2012-10-25
    • 1970-01-01
    • 2018-10-05
    • 2021-08-11
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多