У меня есть объект с составным ключом, поэтому я использую аннотации @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", который ссылается на поле admin в DitaAdminAccountSkillPK, используя поле id в < b>DitaAdminAccountSkill.
Это компилируется и работает нормально. Однако в eclipse отображается сообщение об ошибке: В атрибуте «accountSkills» значение «сопоставлено» «id.admin» не может быть преобразовано в атрибут целевого объекта.
Обратите внимание, что это Проблема JPA, означающая, что аспект JPA жалуется. Теперь я знаю, что мог бы использовать вместо этого @IdClass, но мне просто интересно, почему он считает это ошибкой. А может быть, я делаю что-то ужасно неправильное?