JPA / Hibernate OneToMany Mapping, en utilisant une PrimaryKey composite
Je suis actuellement aux prises avec le droit de la cartographie des annotations pour un scénario à l'aide d'une Clé Primaire composite de Classe. Tout d'abord, ce que je suis en train de réaliser dans les mots:
J'ai 2 classes: le groupe et FieldAccessRule. Un Groupe peut avoir plusieurs FieldAccessRules, tandis qu'un FieldAccessRule n'a qu'UN seul Groupe assigné. Modling ce n'est pas un problème jusqu'à présent (simplifié):
public class Group{
...
@OneToMany(mappedBy = "group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
et pour le FieldAccessRule:
public class FieldAccessRule {
...
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
...
}
Maintenant, j'ai décidé d'utiliser un Composite PK pour le FieldAccessRule, parce qu'une Règle doit être unique pour UN Groupe et UN Champ. Il ressemble à ceci:
@Embeddable
public class FieldAccessRulePK implements Serializable{
private String fieldKey;
private Group group;
...
}
Et de l'ofc. le FieldAccessRule besoin de changer pour
public class FieldAccessRule {
...
@EmbeddedId
private FieldAccessRulePK fieldAccessRulePK;
...
}
Comment puis-je créer le droit de Cartographie pour la FieldAccessRuleSet de Groupe maintenant?
En faisant comme cela, j'obtiens :
Dans l'attribut 'fieldAccessRules", le "mappé par" valeur "groupe" ne peut pas être résolu >attribut de l'entité cible.
Quel est la bonne façon de créer le mappage de Groupe pour UNE PARTIE de PrimaryKey?
Edit:
Je sais que l'aide
public class Group{
...
@OneToMany(mappedBy = "fieldAccessRolePK.group")
private Set<FieldAccessRule> fieldAccessRules;
...
}
est EXACTEMENT fonctionne comme prévu. Il compile très bien, il crée la DB amende et après le chargement d'un groupe de Rôles prédéfinis, ils sont disponibles comme prévu.
Cependant, Eclipse dit encore
Dans l'attribut 'fieldAccessRules", le "mappé par" valeur " fieldAccessRulePK.le groupe " ne peut pas être résolu à un attribut de l'entité cible.
Je ne sais pas, si c'est bon pour ignorer l'Erreur et "assumer" tout est bien... (j'ai trouvé un post, où il a été dit, qu'une cartographie du modèle attr1.attr2 est pris en charge par Hibernate, mais pas JPA-confirmer.)
source d'informationauteur dognose
Vous devez vous connecter pour publier un commentaire.
Dans votre code,
EntityManager
ne peut pas résoudremappedBy
attributfieldAccessRulePK.group
.Raison
EntityManager
supposer queFieldAccessRule
entité ont un nom d'attribut avec fieldAccessRulePK.groupe au cours de laFieldInjection
.Selon Java noms des Variables de la Règlevous ne pouvez pas nommer
fieldAccessRulePK.group
en utilisant des caractères dot > '.'Java Noms Des Variables De La Règle Référence
Tous les noms de variables doivent commencer par une lettre de l'alphabet, un trait de soulignement ( _ ) ou un signe dollar ($). Le reste des caractères peut être l'une de celles mentionnées précédemment, plus les chiffres de 0 à 9.
La convention est de toujours utiliser une lettre de l'alphabet. Le signe de dollar et le trait de soulignement sont découragés.
Une chose de plus:
Ne pas utiliser
group
instance dans votreFieldAccessRulePK
intégrable classe. Pour plus d'référence ici.Essayer comme ci-dessous :
J'ai corrigé un problème similaire en modifiant la
mappedBy
attribut de la classe parent (en utilisant la notation par points)et en gardant les annotations dans le PK classe: