Maison  >  Questions et réponses  >  le corps du texte

Cartographie un-à-plusieurs Hibernate

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粉770375450P粉770375450181 Il y a quelques jours383

répondre à tous(2)je répondrai

  • P粉038161873

    P粉0381618732024-04-02 11:19:49

    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) .

    répondre
    0
  • P粉187677012

    P粉1876770122024-04-02 00:07:37

    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.

    répondre
    0
  • Annulerrépondre