我需要处理一个CSV文件,并且对于每条记录(行)都要保留一个实体。目前,我是这样做的:
while ((line = reader.readNext()) != null) {
Entity entity = createEntityObject(line);
entityManager.save(entity);
i++;
}
这里的save(Entity)
方法基本上只是一个EntityManager.merge()
调用。CSV文件中大约有20,000个实体(行)。这种方法有效吗?它似乎非常慢。使用EntityManager.persist()
会更好吗?这种解决方案有什么缺陷吗?
编辑
这是一个漫长的过程(超过400秒),我尝试了使用persist
和merge
两种解决方案。两者完成所需的时间大致相同(459秒对443秒)。问题在于像这样逐个保存实体是否最优。据我所知,Hibernate(我的JPA提供程序)确实实现了一些缓存/刷新功能,因此我不必担心这个问题。