我有一个带有复合键的实体,因此我使用@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,但我只是想知道为什么它认为这是一个错误。还是我做错了什么?
根据JPA 2.0规范的 11.1.15节: 不支持在嵌入式id类中定义的关系映射。 但是,即使您自己使用的JPA实施未获得标准本身的正式支持,也 可能会对此提供 支持。
如果是这种情况,您可能要在的Eclipse下关闭对此功能的验证Window -> Preferences -> Java Persistence -> JPA -> Errors/Warnings -> Attributes -> Cannot resolve attribute name。
Window -> Preferences -> Java Persistence -> JPA -> Errors/Warnings -> Attributes -> Cannot resolve attribute name