我想在我的数据库中插入一个对象列表.在特殊情况下,我知道他们的主键(不是自动生成的)不存在.由于我需要插入一个大集合,因此save(Iterable< Obj>对象)会变慢.
因此,我考虑使用本机查询. native insert query in hibernate + spring data
在上一个答案中,它没有说明如何插入对象集合.这可能吗?
@Query("insert into my_table (date,feature1,feature2,quantity) VALUES
当然,如果你有一个更好的整体解决方案,它甚至更好.
最佳答案
我最终实现了自己的存储库.这个性能非常好,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() + ")";
}
}