Mapeamento JPA / Hibernate OneToMany, usando uma PrimaryKey composta
Atualmente, estou lutando com as anotações de mapeamento corretas para um cenário usando uma classe de chave primária composta. Primeiro, o que estou tentando conseguir em palavras:
Eu tenho 2 classes: group e FieldAccessRule. Um grupo pode ter muitos FieldAccessRules, enquanto um FieldAccessRule só tem um grupo atribuído. Modling isso não é um problema até agora (simplificado):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
e para o FieldAccessRule:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
Agora, decidi usar um Composite PK para o FieldAccessRule, porque uma regra deve ser exclusiva para ONE Group e ONE Field. Se parece com isso:
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
E ofc. o FieldAccessRule precisa mudar para
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
Como faço para criar o mapeamento correto para o FieldAccessRuleSet do grupo agora? Fazendo assim, eu recebo:
No atributo 'fieldAccessRules', o valor "mapeado por" 'group' não pode ser resolvido para um atributo> na entidade de destino.
Qual é o caminho certo de criar o mapeamento de grupo para uma parte da chave primária?
Edit: Eu sei descobriu, que usando
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
está funcionando EXPRESSAMENTE como esperado. Ele compila bem, cria o banco de dados bem e depois de carregar um grupo com funções pré-definidas, eles estão disponíveis como esperado.
No entanto, o Eclipse ainda diz
No atributo 'fieldAccessRules', o valor "mapeado por" 'fieldAccessRulePK.group' não pode ser resolvido para um atributo na entidade de destino.
Não tenho certeza, se é bom ignorar Error e "assumir" tudo bem ... (Eu encontrei um post, onde foi dito, que um mapeamento do padrão attr1.attr2 é suportado pelo Hibernate, mas não confirmado pelo JPA. )