我需要處理一個CSV文件,併爲每個記錄(行)堅持一個實體。現在,我做這種方式:如何堅持很多實體(JPA)
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
。兩者都需要大致相同的時間才能完成(459s和443s)。問題是如果像這樣一個接一個地保存實體是最佳的。據我所知,Hibernate(這是我的JPA提供者)確實實現了一些緩存/刷新功能,所以我不必擔心這一點。
你可以檢查hibernate.jdbc.batch_size和hibernate.jdbc.use_getGeneratedKeys(但不能設置每個事務)。 – 2011-04-14 05:18:31