У меня есть сущность с составным ключом, поэтому я использую аннотации @Embeddable и @EmbeddedId. Класс Embeddable выглядит следующим образом:
@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 поле DitaAdminAccountSkill.
Это компилируется и работает отлично. Однако в eclipse появляется сообщение об ошибке: В атрибуте "accountSkills" значение "сопоставлено" значением "id.admin" не может быть разрешено для атрибута на целевой сущности.
Обратите внимание, что это проблема JPA, означающая, что фасет JPA жалуется. Теперь, я знаю, что я мог бы использовать @IdClass, но мне просто интересно, почему он думает об ошибке. Или, может быть, я делаю что-то ужасно неправильно?
Спасибо за указатели, Zbynek