JPA / Hibernate Mapowanie OneToMany przy użyciu złożonego PrimaryKey
Obecnie zmagam się z odpowiednimi adnotacjami mapowania dla scenariusza wykorzystującego złożoną klasę kluczy podstawowych. Po pierwsze, co próbuję osiągnąć słowami:
Mam 2 klasy: grupę i FieldAccessRule. Grupa może mieć wiele reguł FieldAccessRule, podczas gdy FieldAccessRule ma tylko jedną grupę. Modling to nie jest jak dotąd problem (uproszczony):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
a dla FieldAccessRule:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
Teraz zdecydowałem się użyć Composite PK dla FieldAccessRule, ponieważ reguła powinna być unikalna dla ONE Group i ONE Field. To wygląda tak:
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
I ofc. FieldAccessRule musi zostać zmieniony na
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
Jak teraz utworzyć odpowiednie mapowanie dla FieldAccessRuleSet grupy? Robiąc to w ten sposób, otrzymuję:
W atrybucie „fieldAccessRules” wartość „grupa” „odwzorowana przez” nie może zostać rozpoznana jako atrybut> jednostki docelowej.
Jaki jest właściwy sposób tworzenia mapowania z grupy na część A PrimaryKey?
Edytuj: Wiem, że się dowiedziałem, że używam
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
działa DOKŁADNIE zgodnie z oczekiwaniami. Kompiluje się dobrze, tworzy porządek DB i po załadowaniu grupy z predefiniowanymi Role są dostępne zgodnie z oczekiwaniami.
Jednak Eclipse wciąż mówi
W atrybucie „fieldAccessRules” wartość „mapowane przez” „fieldAccessRulePK.group” nie może zostać rozpoznana jako atrybut jednostki docelowej.
Nie jestem pewien, czy dobrze jest zignorować błąd i „założyć”, że wszystko jest w porządku ... (znalazłem post, w którym powiedziano, że mapowanie wzorca attr1.attr2 jest obsługiwane przez Hibernate, ale nie przez JPA). )