Sequelize-使用事务进行多次删除查询后,Sqlite数据库被锁定

问题描述

我目前正面临使用交易的随机问题。代码的逻辑是我有一部电影,一部电影hasMany的源以及hasMany个流。从逻辑上讲,当电影被删除时,与之相关的所有内容都应删除。这是通过onDelete: cascade完成的,但与我无关。

这就是为什么我在代码中使用这种方法的原因。如果最好使用cascade方式,请告诉我。我正在使用数据库的一个主文件,该文件具有作为函数的模型,它们被保存到数据库而不是内存中。

错误为SQLITE_BUSY: database is locked。如果我执行代码,则sources_deleted查询将被执行多次,这意味着它只会说DELETE from links_sources where ..etc,尽管它只被编写了一次。

如果我删除了streams_deleted的{​​{1}}和bulk,则代码可以正常工作,而不会出现任何查询循环。如果我同时删除了streamsbulks中的sources,那么代码将正常工作。否则,它将引发streams错误。

我不知道为什么会发生这种行为,而且我不确定如何避免进行不良练习。我应该改变方法还是缺少一些东西?

非常感谢您的帮助。

电影模型

locked

源模型

function getModelMovie(isInstance) {
  let table = sequelize.define('movies',{
    id: {
      type: DataTypes.INTEGER,primaryKey: true,autoIncrement: true
    },title: {
      type: DataTypes.STRING,allowNull: false
    },disma_old_id: {
      type: DataTypes.INTEGER,allowNull: true
    },disma_new_id: {
      type: DataTypes.INTEGER,},{

  });
  if (!isInstance) {
    table.hasMany(getModelLinksSource(true,constants.MEDIA_TYPES.MEDIA_TYPE_MOVIE),{
      foreignKey: 'sourceable_id',constraints: false,scope: {
        sourceable_type: constants.MEDIA_TYPES.MEDIA_TYPE_MOVIE
      },as: "sources",});

    table.hasMany(getModelLinksStreams(true,{
      foreignKey: 'streamable_id',scope: {
        streamable_type: constants.MEDIA_TYPES.MEDIA_TYPE_MOVIE
      },as: "streams",});
  }
  return table
} 

流模型

function getModelLinksSource(isInstance,type) {
  let table = sequelize.define('links_sources',url: {
      type: DataTypes.STRING,sourceable_type: {
      type: DataTypes.STRING,sourceable_id: {
      type: DataTypes.INTEGER,allowNull: false
    }
  },{

  });

  if (!isInstance) {
    if (type === constants.MEDIA_TYPES.MEDIA_TYPE_MOVIE) {
      table.belongsTo(getModelMovie(true),{
        foreignKey: 'streamable_id',scope: {
          sourceable_type: constants.MEDIA_TYPES.MEDIA_TYPE_MOVIE
        },as: "movie"
      });
    } else if (type === constants.MEDIA_TYPES.MEDIA_TYPE_SEASON) {
      table.belongsTo(getModelSeason(true),{
        foreignKey: 'sourceable_id',scope: {
          sourceable_type: constants.MEDIA_TYPES.MEDIA_TYPE_SEASON
        },as: "seasons"
      });
    }
  }

  return table
} 

editMovie功能

function getModelLinksStreams(isInstance,type) {
  let table = sequelize.define('links_streams',streamable_type: {
      type: DataTypes.STRING,streamable_id: {
      type: DataTypes.INTEGER,{

  });

  if (!isInstance) {
    if(type === constants.MEDIA_TYPES.MEDIA_TYPE_MOVIE){
      table.belongsTo(getModelMovie(true),as: "movie"
      });
    }
  }

  return table
} 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...