J'ai une relation bidirectionnelle OneToMany/ManyToOne utilisant une table de jointure. Les enfants sont dans une liste et sont commandés.Suppression de la duplication dans une relation bidirectionnelle OneToMany/ManyToOne à l'aide d'un JoinTable (avec une OrderColumn)
est ici la configuration:
Parent:
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(
name="parent_child",
[email protected](name="parent_id"),
[email protected](name="child_id")
)
@OrderColumn(name="child_order")
public List<Child> getChildren() {
return children;
}
enfant:
@ManyToOne
public Parent getParent() {
return parent;
}
Voici ma question: La table parent est comme prévu, mais voici les tables enfant et PARENT_CHILD:
enfant:
int8 id,
int8 parent_id <---
PARENT_CHILD:
int8 parent_id, <---
int8 child_id,
int8 child_order
Il y a double emploi avec le parent_id - il est spécifié dans la table de jointure et dans la table des enfants qui signifie qu'il est possible d'appeler parent.getChildren() get (0) .getParent.() et finir avec un parent différent de celui que vous avez commencé, ce qui devrait être impossible (et j'aimerais que cela soit appliqué au niveau de la base de données). La seule façon de résoudre ce problème est d'utiliser une colonne de jointure dans l'enfant et de ne pas utiliser de table de jointure du tout. Mais je n'aime pas ça parce que je dois alors passer l'ordre à l'enfant, et les docteurs Hibernate disent qu'un JoinColumn avec OneToMany devrait être évité (mais ils ne disent pas vraiment pourquoi).
Existe-t-il un autre moyen de se débarrasser de cette duplication/incohérence possible? C'est à dire. une façon d'avoir l'enfant connaître son parent en utilisant les données de la table de jointure?