在我的电子应用程序中,我想在应用程序启动时注入数据(例如治具)。
我使用typeorm库来管理SQLite3数据库连接。
我创建了代表Entity typeorm的json文件,我想将所有这些文件都使用typeorm持久保存在我的数据库中。为此,似乎使用交易更有效。
我尝试了两种不同的方法,但是结果是相同的,我不理解为什么。问题消息是:
错误:给定连接的事务已经开始,提交 当前的交易,然后再开始新的交易
我的第一个交易实现:
async setAll(entity, data)
{
let connection = await this.init()
const queryRunner = connection.createQueryRunner()
await queryRunner.connect()
for (const [key, value] of Object.entries(data))
{
await typeorm.getManager().transaction(transactionalEntityManager =>
{
})
}
}
我的第二次交易实现:
async setAll(entity, data)
{
let connection = await this.init()
const queryRunner = connection.createQueryRunner()
await queryRunner.connect()
for (const [key, value] of Object.entries(data))
{
let genre1 = new Genre()
genre1.name = 'toto'
genre1.identifier = 'gt'
genre1.logo = ''
genre1.isActivate = false
await queryRunner.startTransaction()
await queryRunner.manager.save(genre1)
await queryRunner.commitTransaction()
await queryRunner.release()
}
}
NB:第二个实现正确地保留了第一个对象,而不是其他对象。
如何管理为持久保存大量数据而创建到循环中的许多typeorm事务?
答案 0 :(得分:0)
async setAll(entity, data) {
let connection = await this.init()
const queryRunner = connection.createQueryRunner()
await queryRunner.connect()
await queryRunner.startTransaction()
try {
for (const [key, value] of Object.entries(data)) {
let genre1 = new Genre()
genre1.name = 'toto'
genre1.identifier = 'gt'
genre1.logo = ''
genre1.isActivate = false
const newGenre= queryRunner.manager.create(Genre,genre1)
await queryRunner.manager.save(newGenre)
await queryRunner.commitTransaction()
}
} catch {
await queryRunner.rollbackTransaction()
} finally {
await queryRunner.release()
}