我目前正在为使用复合主键类的场景使用正确的映射注释。首先,我想用文字实现什么:
我有 2 个类:组和 FieldAccessRule。一个 Group 可以有多个 FieldAccessRule,而一个 FieldAccessRule 只能分配一个 Group。到目前为止,建模这不是问题(简化):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
对于 FieldAccessRule:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
现在,我决定为 FieldAccessRule 使用复合 PK,因为规则对于 ONE Group 和 ONE Field 应该是唯一的。它看起来像这样:
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
和ofc。FieldAccessRule 需要更改为
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
我现在如何为 Group 的 FieldAccessRuleSet 创建正确的映射?这样做,我得到:
在属性“fieldAccessRules”中,“映射者”值“组”无法解析为目标实体上的 > 属性。
创建从 Group 到 PrimaryKey A PART 的映射的正确方法是什么?
编辑:我知道发现,使用
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
完全按预期工作。它编译得很好,它可以很好地创建数据库,并且在加载具有预定义角色的组后,它们可以按预期使用。
但是,Eclipse 仍然说
在属性“fieldAccessRules”中,“映射者”值“fieldAccessRulePK.group”无法解析为目标实体上的属性。
我不确定,如果忽略错误并“假设”一切都很好......(我发现了一个帖子,据说,Hibernate 支持模式 attr1.attr2 的映射,但不支持 JPA-confirm。 )