Embeddable类中的外键映射

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

  @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? 请帮忙。 谢谢

对于@IdClass@EmbeddedId ,不要将关系放入ID类。 @Embeddable类可能只包含注释@Column @Temporal@Column @Temporal@Column @Temporal@Column @Temporal@Enumerated@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