0
votes

La table de référentiel JPA ne sauve pas de nouveaux identifiants mais ne remplaçait pas ou modifiant

J'ai a.class : xxx

J'ai ToOObject.Class : xxx

Je sauvegarde un objet dans la base de données: xxx

et les tables ressemblent à ceci:

 Entrez la description de l'image ici

puis je sauvegardez à nouveau un objet avec différentes valeurs de b objet: xxx

puis les tables ressemblent à ceci:

Entrer la description de l'image ici

B a été prolongé correctement, mais la table A_B simplifie simplement le b_id mettant la nouvelle 4 lignes.

alors quand je Récupérez l'objet A à partir de la base de données que je n'obtiens que les 4 dernières valeurs de b objet B.

Comment le faire fonctionner avec des nouvelles valeurs (ajout de nouvelles lignes à A_B) sans prouver?

< Strong> Edit:

J'ai ajouté A_ID comme un k étranger EY à B Table. Encore une fois, la première sauvegarde est stockée correctement:

 Entrez la description de l'image ici

puis après une seconde Enregistrer avec différentes valeurs pour B, elle modifie les valeurs de la colonne A_ID Pour les valeurs d'insertion d'informations premières insérées (à NULL). Donc, la table ressemble à ceci:

 Entrez la description de l'image ici


5 commentaires

Pourquoi voulez-vous une table différente pour la relation onetomanany?


@A_HORSE_WITH_NO_NAME J'utilise jpa.


@Tarun Je ne sais pas ce que tu veux dire. Y a-t-il une autre façon que je pourrai faire cela?


Je veux dire, s'il s'agit d'une relation une à plusieurs, vous pouvez enregistrer l'identifiant d'une table B sous forme de clé étrangère au lieu d'avoir une table différente A_B.


@Tarun j'ai ajouté A_ID comme une clé étrangère à la table B. Première sauvegarde est stockée correctement, mais avec une seconde sauvegarde, j'ai obtenu: valeurs null pour une colonne A_ID?


3 Réponses :


0
votes

Étant donné que l'objet est déjà enregistré et qu'un ID attribué est attribué, JPA suppose que vous voulez dire la même entrée dans la base de données. Vous devez cloner l'objet:

SomeRepository.save(a);
A aClone = new A(a);
SomeRepository.save(aClone);


2 commentaires

Je ne suis pas sûr à 100% mais cela étendra une table avec de nouveaux objets?


Non, c'est juste un constructeur de copie. Étant donné que la classe est déjà "enregistrée" avec la mise en œuvre de la JPA, vous avez besoin d'une nouvelle instance. J'ai également étendu l'exemple pour inclure le clonage des instances de quoobus.



0
votes

Hibernate gérer des relations unidirectionnelles très inefficaces s'il vous plaît essayer d'utiliser la relation bidirectionnelle.

En ce qui concerne le problème ci-dessus, vous n'avez pas besoin de troisième table ici, vous pouvez éviter la création d'une troisième table en ajoutant @JOINCOLUMN comme ci-dessous: xxx

ceci va ajouter une colonne " fk_a_id "dans une table quelque_Object.


2 commentaires

J'ai ajouté: (NULLLABLE = FALSE) Paramètre pour @JOINCOLUM Le problème est résolu. Le nom n'est pas nécessaire.


Oui cette contrainte est nécessaire.



0
votes

J'ai ajouté: (nullable = false) Paramètre pour @JOINCOLUM Le problème est résolu.

donc au-dessus de la liste Il y a maintenant: < Pré> xxx


0 commentaires