这是我在阅读了几个关于jpa批量插入的主题后创建的简单示例,我有2个持久对象User和Site.一个用户可以有很多站点,所以我们在这里有一对多的关系.假设我想创建用户并创建/链接几个站点到用户帐户.考虑到我愿意为Site对象使用批量插入,这是代码的样子.
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();
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码(我使用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()
Run Code Online (Sandbox Code Playgroud)
所以,我的意思是"真正的"批量插入不起作用或我感到困惑?
以下是此示例项目的源代码,这是maven项目,因此您只需下载并运行mvn install来检查输出.
更新:
在Ken Liu亲切地建议之后,我已禁用Site对象id自动生成:
User user = new User("John Doe");
user.getSites().add(new Site(1, "google.com", user));
user.getSites().add(new …Run Code Online (Sandbox Code Playgroud) JPA/EJB3框架是否提供了批量插入操作的标准方法......?我们使用hibernate作为持久性框架,所以我可以回退到Hibernate Session并使用组合session.save()/ session.flush()实现批量插入.但是想知道EJB3是否支持这个......