当前位置: 首页 > 知识库问答 >
问题:

唯一键约束的房间迁移不起作用

师建德
2023-03-14

错误:java.lang.IllegalStateException:迁移未正确处理:insta_alerts(org.altruist.bajajexperia.models.ceInstaViewDetailSDTo)。

预期:

database.execSQL("CREATE TABLE IF NOT EXISTS insta_alerts(id INTEGER PRIMARY KEY,campaign TEXT,notificationText TEXT,header TEXT,alertMessage TEXT,priority TEXT,sentDate TEXT,smsText TEXT,customerId TEXT,isSeen INTEGER, CONSTRAINT index_insta_alerts_smsText_customerId UNIQUE(smsText, customerId) ON CONFLICT REPLACE)")
@Entity(
    tableName = "insta_alerts", indices =
    [Index(
        value = ["smsText", "customerId"],
        unique = true
    )]
)
@Parcelize
data class CEInstaViewDetailsDTO(
    @PrimaryKey(/*autoGenerate = true*/)
    @ColumnInfo(name = "id")
    @SerializedName("id")
    var id: Long? = null,
    @ColumnInfo(name = "campaign")
    @SerializedName("campaign")
    var campaign: String? = null,
    @ColumnInfo(name = "notificationText")
    @SerializedName("notificationText")
    var notificationText: String? = null,
    @ColumnInfo(name = "header")
    @SerializedName("header")
    var header: String? = null,
    @ColumnInfo(name = "alertMessage")
    @SerializedName("alertMessage")
    var alertMessage: String? = null,
    @ColumnInfo(name = "priority")
    @SerializedName("priority")
    var priority: String? = null,
    @ColumnInfo(name = "sentDate")
    @SerializedName("sentDate")
    var sentDate: String? = null,
    @ColumnInfo(name = "smsText")
    @SerializedName("smsText")
    var smsText: String? = null,
    @ColumnInfo(name = "customerId")
    @SerializedName("customerId")
    var customerId: String? = null,
    @ColumnInfo(name = "isSeen")
    @SerializedName("isSeen")
    var isSeen: Int? = null
) : Parcelable

共有1个答案

宗晟
2023-03-14

您应该将索引创建添加到迁移中,如下所示

database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_insta_alerts_smsText_customerId ON insta_alerts (smsText,customerId)")
 类似资料:
  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 唯一约束是为模型中的替代键引入的。 惯例 按照惯例,为替代键引入的索引和约束都被命名为 AX_<实体类型名称>_<属性名称>。对于组合替代键,<属性名> 为用下划线分隔的属性名。 数据注解 不能

  • 我有以下问题,我有一个已经存在的表,有三个字段field1,field2,field3。Field1实际上是另一个表的外键(@OneToOne)。所有字段2和字段3都可以为空,所以我不能为所有三个字段设置主键。在数据库中,field1 field2 field3有一个唯一约束。 我用JPA/Hibernate尝试了几种解决方案,但没有找到一个好的。如果不定义@Id,JPA当然无法工作。在@Embe

  • 我正在尝试在Laravel中创建外键,但是当我使用迁移表时,出现以下错误: 我的迁移代码如下: 优先级迁移文件 用户迁移文件 任何关于我做错了什么的想法,我现在就想知道,因为我有很多表需要创建,例如用户、客户、项目、任务、状态、优先级、类型、团队。理想情况下,我希望创建使用外键保存此数据的表,即和等。 希望有人能帮助我开始。

  • 我正在创建一个简单的实体,并试图将它持久化到Oracle数据库中。这是我的天赋: 这是我的Java类,它创建了这个实体的一个实例,并使用HiberNate将其保存到数据库中: 当我运行这个程序时,我得到一个异常: 请帮助我在此代码中犯错误的地方。我正在使用 更新:这是我的Hibernate配置文件,表由Hibernate本身生成: 另外,如果可能的话,请给我推荐一个Hibernate-4.3的好资

  • 问题是,如果整个迁移运行,那么我将用另一列替换列,并修复外键。那么,有什么方法可以忽略迁移的约束呢?

  • 迁移我的数据库时,会出现此错误。下面是我的代码,后面是我在尝试运行迁移时遇到的错误。 密码 错误消息 [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表(errno:150“外键约束格式不正确”)(sql:alter 表添加约束MEINS\u category\u id\u外键()参考()关于删除级联)