java - 使用hibernate 4和spring 3.x批量插入记录

标签 java spring hibernate

java代码:

EntityManager em1 = entityService.getEntityManager();
Query qury1 = em1.createNamedQuery(Constants.UNPROCESSED_CONTACTS);
List<Contact> contacts =  entityService.findByNamedQuery(qury1);

我这里有所有联系人的列表,我想批量添加 100 个联系人。 我正在使用 hibernate 4 和 spring 3.1 我的 applicationContext 是

 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
 </bean>

<bean class="org.springframework.orm.jpa.JpaTransactionManager"
    id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />

我该如何进一步进行。 副词表示感谢。

最佳答案

JPA 本身不提供批量插入功能,但 hibernate 提供。我看到您已经有一个 sessionFactory bean。所以你可以按照 hibernate docs 中的示例进行操作:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

ScrollableResults customers = session.getNamedQuery("GetCustomers")
    .setCacheMode(CacheMode.IGNORE)
    .scroll(ScrollMode.FORWARD_ONLY);
int count=0;
while ( customers.next() ) {
    Customer customer = (Customer) customers.get(0);
    customer.updateStuff(...);
    if ( ++count % 20 == 0 ) {
        //flush a batch of updates and release memory:
        session.flush();
        session.clear();
    }
}

tx.commit();
session.close();

关于java - 使用hibernate 4和spring 3.x批量插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117956/

相关文章:

java - 用于中断和重新启动计算的并发算法

java - XPath - 属性通配符不返回具有名为值的属性的元素

java - 使用 Hibernate 查找数据库大小

java - 使用 twitter4j 从特定位置提取主题标签的推文

java - 行为不一致

java - 如何在 Spring Boot 中设置过滤器链?

java - Hibernate 在 columnDefinition 周围添加反引号

Java/Hibernate : How to detect, 如果字段是延迟加载代理而不是实际数据?

spring - Maven 错误 - Spring Surf Alfresco

java - 虽然有数据行,但结果集为空