使用 JPA/EJB3 批量插入
JPA/EJB3框架是否提供了执行批量插入操作的标准方法...? 我们使用hibernate作为持久化框架,所以我可以回退到Hibernate Session并使用组合session.save()/session.flush()实现批量插入。 但想知道 EJB3 是否支持这个......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
特别是对于 hibernate,核心手册的第 13 章解释方法。
但是您说您希望通过 Hibernate 使用 EJB 方法,因此实体管理器文档也有一章关于该内容 此处。 我建议您阅读两者(核心和实体管理器)。
在 EJB 中,它只是使用 EJB-QL(有一些限制)。 如果您需要更多灵活性,Hibernate 提供了更多机制。
For hibernate specifically, the whole chapter 13 of the core manual explain the methods.
But you are saying that you want the EJB method through Hibernate, so the entity manager documentation also has a chapter on that here. I suggest that you read both (the core and the entity manager).
In EJB, it is simply about using EJB-QL (with some limitations). Hibernate provides more mechanics though if you need more flexibility.
是的,如果您希望获得您定义的控制,您可以回滚到您的 JPA 实现。
JPA 1.0 丰富了 EL-HQL,但缺乏 Criteria API 支持,不过这个问题已在 2.0 中得到解决。
Yes you can rollback to your JPA implementation if you wish in order to have the control you defined.
JPA 1.0 is rich on EL-HQL but light on Criteria API support, however this has been addressed in 2.0.
Pascal
在您插入 100000 条记录的示例中,它是在单个事务中完成的,因为 commit() 仅在最后调用。它会给数据库带来很大的压力吗? 而且万一出现回滚,成本也太大了。
下面的做法会不会更好呢?
Pascal
In your example to insert 100000 records, it is done within single transaction, as the commit() is only called at the end.. Does it put a lot pressure towards the database? Furthermore, in case there is rollback, the cost will be too much..
Will the following approach be better?
JPA 和 Hibernate 都不提供对批量插入的特殊支持,并且使用 JPA 进行批量插入的习惯用法与使用 Hibernate 相同:
在我看来,在这种情况下使用 Hibernate 的专有 API 不会提供任何优势。
参考
Neither JPA nor Hibernate do provide particular support for batch inserts and the idiom for batch inserts with JPA would be the same as with Hibernate:
Using Hibernate's proprietary API in this case doesn't provide any advantage IMO.
References
对于中等记录数,您可以使用这种方式:
但是对于大记录数,您应该在多个事务中执行此任务:
参考:JPA 批量存储
With medium records number you can use this way:
But with large records number you should perform this task in multiple transactions:
Ref: JPA Batch Store