gpt4 book ai didi

java - 可嵌入类中的外键映射

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:28 25 4
gpt4 key购买 nike

我正在为 JPA 使用 eclipselink。我有一个实体,它有一个由两个字段组成的复合键。以下是我的可嵌入主键类的字段(成员)。

    @Embeddable
public class LeavePK {
@ManyToOne(optional = false)
@JoinColumn(name = "staffId", nullable = false)
private Staff staff;
@Temporal(TemporalType.TIMESTAMP)
private Calendar date;
//setters and getters
}

我的实体将保存与员工相关的休假数据,因此我试图结合员工对象和休假日期来生成复合键。除了我的逻辑,它不允许我在可嵌入类中有外键映射。当我尝试使用 JPA 工具--> 从实体生成表 时,它给出了如下错误,这解释了错误,但我没有得到它。

org.eclipse.persistence.exceptions.ValidationException
Exception Description: The mapping [staff] from the embedded ID class [class rs.stapp.entity.LeavePK] is an invalid mapping for this class. An embeddable class that is used with an embedded ID specification (attribute [leavePK] from the source [class rs.stapp.entity.Leave]) can only contain basic mappings. Either remove the non basic mapping or change the embedded ID specification on the source to be embedded.

这是否意味着,我不能拥有同时也是外键的键(来自复合键)。是否有替代方法来完成此 ERM?请帮忙。谢谢

最佳答案

不要将关系放入 ID 类中,无论是 @IdClass 还是 @EmbeddedId@Embeddable 类可能只包含注释 @Basic@Column@Temporal@枚举@Lob@Embedded。其他一切都是特定于提供者的语法(例如,Hibernate 允许这样做,但由于您使用的是 EclipseLink,它是 JPA RI,我怀疑这就是您想要的)。

这是一个 JPA PK/FK 映射示例:

@Entity
@Table(name = "Zips")
public class Zip implements Serializable
{
@EmbeddedId
private ZipId embeddedId;

@ManyToOne
@JoinColumn(name = "country_code", referencedColumnName = "iso_code")
private Country country = null;

...
}

@Embeddable
public class ZipId implements Serializable
{
@Column(name = "country_code")
private String countryCode;

@Column(name = "code")
private String code;

...
}

HTH

关于java - 可嵌入类中的外键映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10078224/

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