Java 尝试使用JPA/hibernate批插入.csv未按预期工作
我正在尝试使用servlet上传一个.csv文件,并将数据插入我学校项目的数据库中。我为每一次提交创建了一个新的EntityManager,上传过程耗时数小时。我研究了批量插入,这就是我得出的结论:Java 尝试使用JPA/hibernate批插入.csv未按预期工作,java,csv,jpa,Java,Csv,Jpa,我正在尝试使用servlet上传一个.csv文件,并将数据插入我学校项目的数据库中。我为每一次提交创建了一个新的EntityManager,上传过程耗时数小时。我研究了批量插入,这就是我得出的结论: entityManager.getTransaction().begin(); int i = 0; int batchsize = 500; while(scanner.hasNext()) { i++ String row = scanner.next(); String[] column =
entityManager.getTransaction().begin();
int i = 0;
int batchsize = 500;
while(scanner.hasNext()) {
i++
String row = scanner.next();
String[] column = row.split(";");
Entity e = new Entity();
e.setSomeValue(column[1]);
entityManager.persist(e);
if(i%batchsize == 0) {
entityManager.flush();
entityManager.clear();
}}
entityManager.getTransaction().commit();
我认为第一次它工作得很好,它在数据库中插入了90k行,但试图上传第二个文件,它似乎工作得很好,但最后没有添加新行。
我已经设置了entityManager.setFlushMode(FlushModeType.COMMIT)&实体的PK是自动生成的序列,而不是由DB生成的。
这是否与:
提交时,事务被标记为仅回滚,回滚
编辑:i++
entityManager.flush();entityManager.clear()每次迭代都会调用code>,因为0%500==0
总是这样,我忘了把它放进去,但在while循环中,我首先调用“I++”