В настоящее время я борюсь с правильными аннотациями сопоставления для сценария, используя составной класс первичных ключей. Во-первых, чего я пытаюсь достичь словами:
У меня есть 2 класса: group и FieldAccessRule. Группа может иметь много полей FieldAccessRules, в то время как FieldAccessRule имеет только одну группу. Модирование этого пока не является проблемой (упрощено):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
и для параметра FieldAccessRule:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
Теперь я решил использовать Composite PK для FieldAccessRule, потому что правило должно быть уникальным для ONE Group и ONE Field. Это выглядит так:
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
И из. для параметра FieldAccessRule необходимо изменить значение
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
Как создать правильное сопоставление для FieldAccessRuleSet группы сейчас? Делая это, я получаю:
В атрибуте 'fieldAccessRules', "сопоставленная по" группе "значение" не может быть разрешена к атрибуту > на целевом объекте.
Каков правильный способ создания сопоставления из группы в ЧАСТИ PrimaryKey?
Изменить: Я знаю, что, используя
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
ТОЧНО работает, как ожидалось. Он компилируется отлично, он создает БД прекрасно и после загрузки группы с предопределенными Ролями они доступны, как ожидалось.
Однако Eclipse все еще говорит
В атрибуте 'fieldAccessRules', "сопоставленное" значением 'fieldAccessRulePK.group' не может быть разрешено к атрибуту на целевом объекте.
Я не уверен, если хорошо игнорировать ошибку и "предполагать" все отлично... (я нашел сообщение, в котором было сказано, что сопоставление шаблона attr1.attr2 поддерживается Hibernate, но не JPA -confirm.)