我正在循环列表并将其插入数据库中,但它得到的更新记录一个接一个。最后我只在列表中的数据库最后一条记录中看到。
输入名称:Linux,Windows,Mac
Session session = (Session) HibernateUtil.getSessionFactory().openSession(); String[] items = pi.getNewLicenseName().split(","); for (String item : items) { feature.setName(item); session.save(feature); } session.getTransaction().commit(); HibernateUtil.shutdown();
hibernate.cfg.xml:
<hibernate-configuration> <session-factory> <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.url">jdbc:sqlserver://******</property> <property name="connection.username">*****</property> <property name="connection.password">*****</property> <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property> <property name="show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- Names the annotated entity class --> <mapping class="com.DAO.Feature"/> </session-factory>
这里有3次获得循环并插入数据库。但是以某种方式覆盖了这些值。因为我看到sql插入和更新在控制台中运行。
Hibernate: insert into FEATURE (NAME) values (?) Hibernate: update FEATURE set NAME=? where FEATURE_ID=?
请帮助我将多个行插入数据库。
Hibernate文档中有一章非常好的关于批处理的章节。
设置属性
hibernate.jdbc.batch_size 20
然后使用此代码
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); if ( i % 20 == 0 ) { //20, same as the JDBC batch size //flush a batch of inserts and release memory: session.flush(); session.clear(); } } tx.commit(); session.close();
更新2015-09-23
我终于找到时间坐下来在https://frightanic.com/software-development/jpa-batch- inserts/上写了一篇详细的文章。