electron - 将许多事务 typeorm 启动到循环 javascript
问题描述
在我的电子应用程序中,我想在应用程序启动时注入数据(如夹具)。
我使用 typeorm 库来管理我的 SQLite3 数据库连接。
我创建了代表实体 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()
}
}
注意:第二个实现正确地保留第一个对象而不是其他对象。
如何管理创建到循环中的许多 typeorm 事务以持久保存大量数据?
解决方案
async setAll(entity, data) {
let connection = await this.init()
const queryRunner = connection.createQueryRunner()
await queryRunner.connect()
await queryRunner.startTransaction()
try {
for await (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()
}
推荐阅读
- postgresql - Postgres 在“A OR exists(B)”查询中进行优化
- csv - 如何在 GoogleShell 中使用 gsutil compose 并跳过第一行?
- javascript - Shopify - 购买免费产品
- javascript - 将 Azure Cosmos 表值转换为 HTML
- voltdb - 如何限制voltdb使用的内存
- python - Sqlalchemy 插入“?” 在 where 子句中
- laravel - 更改错误包中消息的密钥?
- c# - 在 WebAPI 中为 int 的情况下覆盖消息“值 {0} 对于 {1} 无效”
- java - 无法在 Eclipse 中从 wsdl 和 xsd 文件生成 java 文件
- r - 如何从 R 中刷新 excel 文件?