私は現在、複合主キー クラスを使用するシナリオの適切なマッピング アノテーションに苦労しています。まず、私が言葉で達成しようとしていること:
グループと FieldAccessRule の 2 つのクラスがあります。グループには多くの FieldAccessRules を設定できますが、FieldAccessRule には 1 つのグループしか割り当てられません。これを改造することは今のところ問題ではありません (簡略化):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
FieldAccessRule の場合:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
ここで、ルールは 1 つのグループと 1 つのフィールドに対して一意である必要があるため、FieldAccessRule に複合 PK を使用することにしました。次のようになります。
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
そしての。FieldAccessRule を変更する必要があります
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
グループの FieldAccessRuleSet に適切なマッピングを作成するにはどうすればよいですか? このようにすると、次のようになります。
属性 'fieldAccessRules' で、"mapped by" 値 'group' をターゲット エンティティの >attribute に解決できません。
Group から PrimaryKey の A PART へのマッピングを作成する正しい方法は何ですか?
編集:私は知っている、それを使用して
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
期待どおりに正確に機能しています。正常にコンパイルされ、DB が正常に作成され、定義済みの役割を持つグループをロードした後、それらは期待どおりに利用可能になります。
ただし、Eclipseはまだ言います
属性 'fieldAccessRules' で、"mapped by" 値 'fieldAccessRulePK.group' をターゲット エンティティの属性に解決できません。
エラーを無視して、すべてが正常であると「仮定」するのが良いかどうかはわかりません... (パターン attr1.attr2 のマッピングは Hibernate でサポートされているが、JPA-confirm ではサポートされていないと言われている投稿を見つけました。 )