Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用JPA/hibernate批插入.csv未按预期工作_Java_Csv_Jpa - Fatal编程技术网

Java 尝试使用JPA/hibernate批插入.csv未按预期工作

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 =

我正在尝试使用servlet上传一个.csv文件,并将数据插入我学校项目的数据库中。我为每一次提交创建了一个新的EntityManager,上传过程耗时数小时。我研究了批量插入,这就是我得出的结论:

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(),因为
0%500==0
总是这样,我忘了把它放进去,但在while循环中,我首先调用“I++”