插入到数据库要花很多时间,如何加快整个过程?在这个项目中,我使用的是hibernate
for (int a = 0; a < persons.size(); a++) {
Person person = new Person();
Gender gender = new Gender();
gender.setName(persons.get(a).getGender());
gender = genderRepository.save(gender);
Country country = new Country();
country.setName(persons.get(a).getCountry());
country = countryRepository.save(country);
person.setName(personss.get(a).getFirstName());
person.setLastName(persons.get(a).getLastName());
person.setAdditionalInfo(persons.get(a).getIdentifier());
person.setGender(gender);
Set<Country> countries = new HashSet();
countries.add(country);
person.setCountries(countries);
personRepository.save(person);
}
2条答案
按热度按时间tzcvj98z1#
您需要在一个hibernate事务中执行所有insert操作。在person存储库中创建addpersonlist方法
现在,所有操作都在一个persistcontext中,hibernate可以优化数据库中的插入和提交。
升级版本:
如果尚未更改事务传播级别(默认传播级别为propagation.required),则可以在addpersonlist方法中使用其他repositories@transactional方法-这不会影响速度,因为hibernate不会为它们创建新事务。所以,这个代码也可以:
cs7cruho2#
意见:
不要在“for”语句中添加新的person对象
不在“for”语句中启动新事务
原因:
在“for”语句中,新对象将导致资源浪费
sql尝试放在一个段落中,减少对数据库的操作