使用@EmbeddedId进行映射时出现 Eclipse 错误

2022-09-03 16:56:24

我有一个带有复合键的实体,所以我使用@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 中使用 DitaAdminAccountSkill 的 id 字段的 admin 字段。

这可以很好地编译和运行。但是,在 eclipse 中显示一个错误:在属性 'accountSkills'中,“映射者”值 'id.admin' 无法解析为目标实体上的属性。

请注意,这是一个 JPA 问题,这意味着 JPA 方面正在抱怨。现在,我知道我可以使用@IdClass,但我只是想知道为什么它认为这是一个错误。或者也许我做错了什么?


答案 1

根据 JPA 2.0 规范的 11.1.15 节:不支持在嵌入式 id 类中定义的关系映射。但是,您正在使用的 JPA 实现可能支持此功能,即使标准本身并不正式支持它。

如果是这种情况,您可能希望在 Eclipse 中的 .Window -> Preferences -> Java Persistence -> JPA -> Errors/Warnings -> Attributes -> Cannot resolve attribute name


答案 2

在我的情况下,直到我将以下内容设置为:Ignore

Project Facets > JPA > Errors/Warnings > Type > Mapped Java Class is a member class

推荐