我有一个导入数据的方法。如果导入很大,则无法在单个事务中运行,并且由于巨大的事务语句缓存而可能导致 OutOfMemoryError。
我想要的是在语句缓存中的n条记录之后手动提交。
我怎样才能实现这个目标? (最好在 @Transactional 方法中)。
Use EntityManager.flush()
and EntityManager.clear()
在每第 N 次迭代中,以便会话同步到数据库,并清除缓存以防止 OOM。
如果您使用 Hibernate,您还可以设置hibernate.jdbc.batch_size
为适当的值以在 JDBC 级别上进行批处理。
如果您还想在批处理后提交并坚持使用 @Transactional 方法,请重构您的代码,以便 @Transactional 方法从输入源获取一批 N 条记录,并从外部循环调用该方法。否则你可以使用 Spring 的TransactionTemplate
以编程方式控制事务。
这可能有用:http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/ch15.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)