Cartographie un-à-plusieurs Hibernate
P粉770375450
P粉770375450 2024-04-01 19:57:24
0
2
490

J'essaie de conserver 6 commentaires dans la table Commentaire de la base de données en utilisant une clé étrangère pour l'identifiant de la publication, mais les 3 derniers commentaires écrasent les 3 premiers commentaires avec la clé étrangère nouvellement ajoutée.

Catégorie de test :

Comments comments = new Comments("1st Comment", new Date(System.currentTimeMillis()));
Comments comments2 = new Comments("2st Comment", new Date(System.currentTimeMillis()));
Comments comments3 = new Comments("3st Comment", new Date(System.currentTimeMillis()));

ArrayList<Comments> arrayList = new ArrayList<>();
arrayList.add(comments);
arrayList.add(comments2);
arrayList.add(comments3);

// Insert Without Comment
Post post1 = new Post("1st Post", "1st Post Description", new ArrayList<Comments>(), new Date(System.currentTimeMillis()));
postReposetory.save(post1);

// Insert With Comment
Post post2 = new Post("2st Post", "2st Post Description", arrayList, new Date(System.currentTimeMillis()));
postReposetory.save(post2);

// Update (Insert Comment)
post1.setComments(arrayList);
post1.setUpdatedAt(new Date(System.currentTimeMillis()));
postReposetory.save(post1);

P粉770375450
P粉770375450

répondre à tous(2)
P粉038161873

Vous créez au total 3 instances de commentaires (donc 3 enregistrements dans la table de la base de données) au lieu de 3 instances par publication.

Lorsque vous mettez à jour le commentaire post1, vous aurez le commentaire post2 comme paramètre, donc la clé étrangère des commentaires vers post2 deviendra post1.

Si vous souhaitez 3 commentaires par publication, vous aurez besoin d'un total de 6 instances de commentaires (2 publications * 3 commentaires) .

P粉187677012

Cela se produit parce que vous mettez le même objet d'annotation et que la mise en veille prolongée pense que vous souhaitez connecter l'annotation de post2 更改为 post1.

Il faut donc reconstruire ces trois annotations.

    Comments comments = new Comments("1st Comment", new Date(System.currentTimeMillis()));
    Comments comments2 = new Comments("2st Comment", new Date(System.currentTimeMillis()));
    Comments comments3 = new Comments("3st Comment", new Date(System.currentTimeMillis()));

    ArrayList arrayList = new ArrayList();
    arrayList.add(comments);
    arrayList.add(comments2);
    arrayList.add(comments3);

    // Insert With Comment
    Post post1 = new Post("1st Post", "1st Post Description", new ArrayList(), new Date(System.currentTimeMillis()));
    postReposetory.save(post1);
    
    // Insert Without Comment
    Post post2 = new Post("2st Post", "2st Post Description", arrayList, new Date(System.currentTimeMillis()));
    postReposetory.save(post2);

    // Update (Insert Comment)
    comments = new Comments("1st Comment", new Date(System.currentTimeMillis()));
    comments2 = new Comments("2st Comment", new Date(System.currentTimeMillis()));
    comments3 = new Comments("3st Comment", new Date(System.currentTimeMillis()));
    post1.setComments(List.of(comments, comments2, comments3));
    post1.setUpdatedAt(new Date(System.currentTimeMillis()));
    postReposetory.save(post1);

Cela crée trois objets supplémentaires pour les commentaires.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal