【发布时间】:2011-11-13 01:11:14
【问题描述】:
我需要从每日 CSV 文件中获取大量数据。 CSV 包含大约 120K 条记录。使用休眠时,这会减慢速度。基本上,当使用 saveOrUpdate(); 时,似乎hibernate 在每次插入(或更新)之前都在执行 SELECT;对于使用 saveOrUpdate() 持久化的每个实例,在实际 INSERT 或 UPDATE 之前发出 SELECT。我可以理解它为什么要这样做,但是它在进行批量处理时效率非常低,我正在寻找替代方案
我确信性能问题在于我为此使用 hibernate 的方式,因为我得到了另一个使用本机 SQL 的版本(以 excat 相同的方式解析 CSV)及其字面上围绕这个运行的圆圈新版本)
那么,对于实际问题,是否存在 mysqls "INSERT ... ON DUPLICATE" 语法的休眠替代方案?
或者,如果我选择为此执行本机 SQL,我可以在休眠事务中执行本机 SQL 吗?意思是,它会支持提交/回滚吗?
【问题讨论】:
-
当使用 saveOrUpdate() 时,“hibernate 在每次插入(或更新)之前执行 SELECT”是什么意思。 ?你能发布你用来保存数据的代码吗?顺便说一句,120k 记录是一个巨大的数据!
-
刚找到一篇关于batch processing in hibernate的文章