我需要解析一个非常大的文件,并将生成的实体存储在数据库中。我期望每个文件多达15万条记录,并乐于批量处理这些记录。
有没有办法用JPA批量插入播放实体?
发布于 2011-07-31 18:29:55
为了节省内存,您必须确保定期清除会话,因此
Customer.em().getTransaction().begin();
for ( int i=1; i<=100000; i++ ) {
....
myCustomer.save();
if (i%1000==0) {
//Customer.em().getTransaction().commit();
Customer.em().flush();
Customer.em().clear();
//Customer.em().getTransaction().begin();
}
}
Customer.em().getTransaction().commit(); 如果优化批处理大小hibernate.jdbc.batch_size 100,您将如何提高性能
您可以简单地将最后一行添加到application.conf,所有hibernate.*属性都直接转到hibernate。有关详细信息,请参阅JPAPlugin代码。
发布于 2011-07-30 21:28:44
因为Play在幕后使用Hibernate,所以您应该能够使用Hibernate使用的标准批处理。请参阅http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html
但是,Play会自动为您管理事务,因此,如果您需要防止Play干扰事务管理,您可以使用@play.db.jpa.NoTransaction注释您的方法。
您可以在这里阅读有关Play的JPA和事务支持的更多信息http://www.playframework.org/documentation/1.2.1/jpa
https://stackoverflow.com/questions/6882447
复制相似问题