Voici un exemple simple que j'ai créé après avoir lu plusieurs rubriques sur les insertions en masse jpa, j'ai 2 objets persistants Utilisateur et Site. Un utilisateur peut avoir beaucoup de site, donc nous avons une à plusieurs relations ici. Supposons que je souhaite créer un utilisateur et créer/lier plusieurs sites à un compte d'utilisateur. Voici à quoi ressemble le code, compte tenu de ma volonté d'utiliser l'insertion en bloc pour les objets Site.Insertion en bloc JPA/Hibernate (lot)
User user = new User("John Doe");
user.getSites().add(new Site("google.com", user));
user.getSites().add(new Site("yahoo.com", user));
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(user);
tx.commit();
Mais quand je lance ce code (j'utilise hiverne en tant que fournisseur d'implémentation JPA) Je vois suivant la sortie sql:
Hibernate: insert into User (id, name) values (null, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
Donc, je signifie en vrac "réel" pas insérer des œuvres ou I suis confus?
Voici source code pour cet exemple de projet, c'est un projet maven donc vous n'avez qu'à télécharger et lancer mvn install pour vérifier la sortie.
mise à jour:
Après Ken Liu bien voulu conseiller, je l'ai objet Site désactivé génération automatique id:
User user = new User("John Doe");
user.getSites().add(new Site(1, "google.com", user));
user.getSites().add(new Site(2, "yahoo.com", user));
entityManager.setFlushMode(FlushModeType.COMMIT);
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(user);
tx.commit();
Maintenant, j'ai ligne suivante dans la sortie de débogage:
DEBUG: org. hibernate.jdbc.AbstractBatcher - Exécution de la taille du lot: 2
Cela fonctionne!
Oh, c'est logique! Merci – abovesun
J'ai mis à jour la question, pourriez-vous s'il vous plaît vérifier, merci – abovesun
comment générez-vous vos clés maintenant? Vous devrez être sûr que vos clés sont uniques. –