Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA/Hibernate bulk(batch) insert

Tags:

Here is simple example I've created after reading several topics about jpa bulk inserts, I have 2 persistent objects User, and Site. One user could have many site, so we have one to many relations here. Suppose I want to create user and create/link several sites to user account. Here is how code looks like, considering my willing to use bulk insert for Site objects.

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(); 

But when I run this code (I'm using hibernate as jpa implementation provider) I see following sql output:

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

So, I means "real" bulk insert not works or I am confused?

Here is source code for this example project, this is maven project so you have only download and run mvn install to check output.

UPDATED:

After Ken Liu kindly advise, I've disabled Site object id auto generation:

    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(); 

Now I have following line in debug output:

DEBUG: org.hibernate.jdbc.AbstractBatcher - Executing batch size: 2

It works!

like image 960
Andriy Kopachevskyy Avatar asked May 05 '10 12:05

Andriy Kopachevskyy


1 Answers

If you're using the database to generate ids, then Hibernate has to execute a query to generate the primary key for each entity.

like image 75
Ken Liu Avatar answered Oct 13 '22 23:10

Ken Liu