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