小编典典

使用@EmbeddedId映射时的Eclipse错误

hibernate

我有一个带有复合键的实体,因此我使用@Embeddable和@EmbeddedId批注。可嵌入类如下所示:

@Embeddable
public class DitaAdminAccountSkillPK implements Serializable {

  @ManyToOne
  @JoinColumn(name = "admin_id")
  private DitaAdmin admin;

  @ManyToOne
  @JoinColumn(name = "account_id")
  private DitaAccount account;

  //constructor, getters, setters...
}

以及使用它的实体:

@Entity
public class DitaAdminAccountSkill {

  @EmbeddedId
  private DitaAdminAccountSkillPK id;

  //constructor, getters, setters...
}

现在,我想将该实体映射到另一个这样的实体中:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "id.admin")
private List<DitaAdminAccountSkill> accountSkills;

注意 的mappedBy =“id.admin” 是指 管理 字段中 DitaAdminAccountSkillPK 使用
ID 的字段 DitaAdminAccountSkill

这样可以编译运行。但是,在eclipse中显示的错误提示: 在属性“ accountSkills”中,“映射人”值“
id.admin”无法解析为目标实体上的属性。

请注意,这是一个 JPA问题,
表示JPA方面在抱怨。现在,我知道我可以改用@IdClass,但我只是想知道为什么它认为这是一个错误。还是我做错了什么?


阅读 291

收藏
2020-06-20

共1个答案

小编典典

根据JPA 2.0规范的 11.1.15节: 不支持在嵌入式id类中定义的关系映射。
但是,即使您自己使用的JPA实施未获得标准本身的正式支持,也 可能会对此提供 支持。

如果是这种情况,您可能要在的Eclipse下关闭对此功能的验证Window -> Preferences -> Java Persistence -> JPA -> Errors/Warnings -> Attributes -> Cannot resolve attribute name

2020-06-20