嵌入式类中的外键映射(Foreign key mapping inside Embeddable c

2019-07-28 20:48发布

我使用eclipselinkJPA 。 我有一个实体,它具有制作出两个场的一个组合键 。 以下是我的嵌入式主键类的字段(成员)。

    @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一个替代方式? 请帮忙。 谢谢

Answer 1:

不要把关系到ID类,既不是@IdClass@EmbeddedId的。 一个@Embeddable类可以只包括注解@Basic@Column@Temporal@Enumerated@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



文章来源: Foreign key mapping inside Embeddable class