gpt4 book ai didi

java - jpa hibernate复合外键映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:53:55 24 4
gpt4 key购买 nike

我在为某些实体设置 jpa 映射时遇到问题。我有一个如下定义的父实体。

@Entity
@Table(name="EIF_INSTANCE_HDR")
public class InstanceEntity implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(generator="eif_inst_gen")
@SequenceGenerator(name="eif_inst_gen",sequenceName="EIF_INSTANCE_SEQ")
@Column(name = "EAIH_ID")
private Long eaihid;

@Column(name = "EAD_ID")
private Long eadid;

@OneToMany(targetEntity=InstanceNotifyEntity.class, mappedBy="instance",fetch=FetchType.EAGER, cascade = CascadeType.ALL)
private List<InstanceNotifyEntity> userDetails = new ArrayList<InstanceNotifyEntity>();

}

然后我有一个带有复合键的子实体,以及该表主键的外键,如下所示:

@Entity
@Table(name="EIF_INST_NOTIFIED")
public class InstanceNotifyEntity implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@ManyToOne
@JoinColumn(name="EAIH_ID", referencedColumnName="EAIH_ID")
private InstanceEntity instance;

@Id
@Column(name="USER_ID")
private Long userId;

@Column(name="COMMENT_TXT")
private String commentText;

}

我知道子实体不正确,但我不确定如何设置它以获得复合 PK。我知道我需要设置一个 PK 类,但我不确定当一个字段是父类的外键时该怎么做。一旦设置完成,父实体将如何引用子实体?

感谢任何帮助。

最佳答案

这受 JPA 2 spec 管辖第 2.4.1 节,“对应于派生身份的主键”。本节包含两个直接适用于您的问题的示例。

如规范中所述,在这种情况下有两种表示子实体键的方法:

  • @IdClass
  • @EmbeddedId

这是 EmbeddedId 方式的粗略草图。我随意选择了 EmbeddedId,但是 IdClassEmbeddedId 之间的选择很重要。您可能会做出不同的选择。

// Child entity's composite primary key
@Embeddable
public class InstanceNotifyEntityId implements Serializable {
Long eaihId;
Long userId;
}

// Child entity
@Entity
@Table(name="EIF_INST_NOTIFIED")
public class InstanceNotifyEntity implements Serializable {
@AttributeOverrides({
@AttributeOverride(name="userId", column = @Column(name="USER_ID"))
@AttributeOverride(name="eaihId", column = @Column(name="EAIH_ID"))
})
@EmbeddedId
InstanceNotifyEntityId id;

@MapsId("eaihId")
@ManyToOne
InstanceEntity instance;

// ...
}

父实体需要一个更改:userDetails 属性 mappedBy 应该是“id.eaihId”。我想就是这样,但我以前没有使用过完全像这样的实体。可能遗漏了什么...如果您发现错误,请发布。

关于java - jpa hibernate复合外键映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3323751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com