java – Native List在Jpa/hibernate Spring中插入查询

我想在我的数据库中插入一个对象列表.在特殊情况下,我知道他们的主键(不是自动生成的)不存在.由于我需要插入一个大集合,因此save(Iterable< Obj>对象)会变慢.

因此,我考虑使用本机查询. native insert query in hibernate + spring data

在上一个答案中,它没有说明如何插入对象集合.这可能吗?

@Query("insert into my_table (date,feature1,feature2,quantity) VALUES Now what to add here>",nativeQuery = true)
void insert(List

当然,如果你有一个更好的整体解决方案,它甚至更好.

最佳答案
我最终实现了自己的存储库.这个性能非常好,2s而不是35s之前插入50000个元素.这段代码的问题在于它不会阻止sql注入.

我还尝试使用setParameter(1,…)构建一个查询,但不知何故,JPA需要很长时间才能完成.

class ObjectRepositoryImpl implements DemandGroupSalesOfDayCustomrepository {

    private static final int INSERT_BATCH_SIZE = 50000;

    @Autowired
    private EntityManager entityManager;

    @Override
    public void blindInsert(ListsqlForObj).collect(joining(","));
         String insertsql = "INSERT INTO mytable (date,quantity) VALUES ";
         entityManager.createNativeQuery(insertsql + values).executeUpdate();
         entityManager.flush();
         entityManager.clear();
    }

    private String rendersqlForObj(Object obj) {
        return "('" + obj.getDate() + "','" +
            obj.getFeature1() + "','" +
            obj.getFeature2() + "'," +
            obj.getQuantity() + ")";
    }
}

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...