JPA API并未为您提供最佳选择。根据您要执行此操作的速度,您将不得不寻找特定于ORM的选项-在您的情况下为休眠状态。
检查事项:
- 检查您是否正在使用单笔交易(是的,显然您对此有把握)
- 检查您的JPA提供程序(Hibernate)是否正在使用JDBC批处理API(请参阅:hibernate.jdbc.batch_size)
- 检查是否可以绕过获取生成的密钥(取决于db / jdbc驱动程序,您从中获得多少好处-请参阅:hibernate.jdbc.use_getGeneratedKeys)
- 检查您是否可以绕过级联逻辑(这样做只能带来最小的性能收益)
因此,在Ebean ORM中,这将是:
EbeanServer server = Ebean.getServer(null); Transaction transaction = server.beginTransaction(); try { // Use JDBC batch API with a batch size of 100 transaction.setBatchSize(100); // Don't bother getting generated keys transaction.setBatchGetGeneratedKeys(false); // Skip cascading persist transaction.setPersistCascade(false); // persist your beans ... Iterator<YourEntity> it = null; // obviously should not be null while (it.hasNext()) { YourEntity yourEntity = it.next(); server.save(yourEntity); } transaction.commit(); } finally { transaction.end(); }哦,如果您通过原始JDBC执行此操作,则会跳过ORM开销(减少了对象创建/垃圾收集等操作),因此我不会忽略该选项。
因此,是的,这不能回答您的问题,但可以帮助您搜索更多针对ORM的特定批量插入调整。



