我想在我的数据库中插入一个对象列表.在特殊情况下,我知道他们的主键(不是自动生成的)不存在.由于我需要插入一个大集合,因此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() + ")";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。