Salut j’ai 2 tables comme ci-dessous
Tableau 1:
+ ------------------- + | ID LOB col1 col2 | + ------------------- +
Clé primaire (ID et LOB)
Tableau 2:
+ ----------------- + | SK ID col3 col4 | + ----------------- +
Clé primaire (SK)
Je dois donner une relation multiple à un entre le tableau 2 et le tableau1 , car ce dernier contient compositePrimaryKey (ID et LOB), mais il n’y a pas de colonne liée à LOB dans le tableau . Je suis incapable de fournir la cartographie. S’il vous plaît aider sur ce point.
EDIT j’ai essayé la mise en veille prolongée pour Table2:
Ce qui précède ne fonctionne pas. Lors de l’extraction d’un enregistrement, il essaie d’extraire le code LOB de la table2, ce qui n’existe pas du tout dans la Table1.
En supposant que table2.SK
est un FK dans table1.ID
et qu’aucune entrée de table1
ne possède le même ID, vous pouvez écrire le mappage comme suit:
@ManyToOne @JoinColumn(name = "ID", insertable = false, updatable = false) private Class1 class1Obj;
S’il y a plus de lignes table1
avec le même ID, le mappage échouera car un enfant serait alors associé à plusieurs parents.
Ainsi, pour une association many-to-one
un appropriée, vous avez besoin d’une clé FK en colonne Parent unique.
Hibernate @Id
ne doit pas nécessairement correspondre à la clé primaire de la firebase database réelle (bien qu’il soit souhaitable qu’elles correspondent, bien sûr).
Si ID
est une colonne unique dans Table1
, mappez uniquement l’identifiant Hibernate et laissez LOB
comme un champ ordinaire.
Si ID
n’est pas une colonne unique, votre plusieurs-en-un ne fonctionnera pas correctement, car il y aurait plusieurs lignes correspondantes dans la table référencée.
@Entity @Table(name="Table_name") public class table_name { @EmbeddedId @AtsortingbuteOverrides({ @AtsortingbuteOverride(name = "id1", column = @Column(name = "col1")), @AtsortingbuteOverride(name = "id2", column = @Column(name = "col2")) })