下面是我在阅读关于jpa批量插入的几个主题后创建的简单示例,我有2个持久对象用户和站点。一个用户可以有很多网站,所以我们在这里有一对多的关系。假设我想创建用户并创建/链接几个站点到用户帐户。考虑到我愿意为Site对象使用批量插入,以下是代码的样子。JPA/Hibernate批量(批量)插入
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();
但是当我运行这段代码(我使用Hibernate作为JPA实现提供商)我看到下面的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()
所以,我的意思是“真正的”批量插入不工作或我很困惑?
这里是source code这个例子项目,这是maven项目,所以你只有下载并运行mvn install来检查输出。
更新:
后刘宇昆请告知,我已禁用网站的对象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();
现在我已经在调试输出以下行:
DEBUG:组织。 hibernate.jdbc.AbstractBatcher - 执行批量大小:2
它的工作原理!
哦,这是有道理!谢谢 – abovesun 2010-05-05 14:33:26
我已更新问题,请您检查一下,谢谢 – abovesun 2010-05-05 14:47:22
您现在如何生成密钥?你必须确保你的密钥是唯一的。 – 2010-05-05 17:13:57