Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

638
Visualizações
El campo Android Room notNull espera un valor predeterminado nulo

Estoy tratando de agregar nuevos atributos a mis tablas como se muestra aquí:

 @Entity( tableName = "invoices", indices = [Index(value = [...], unique = true)] ) data class Invoice( ... override val created_at: Long = 0, override var approved_at: Long? = 0, ) : ICD

así que creé la siguiente migración:

 val MIGRATION_3_4 = object: Migration(3, 4) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("ALTER TABLE invoices ADD COLUMN created_at INTEGER NOT NULL DEFAULT 0") database.execSQL("ALTER TABLE invoices ADD COLUMN approved_at INTEGER DEFAULT 0 ") } }

pero cada vez que intento ejecutarlo, dice que la migración no se manejó correctamente y muestra esto como se esperaba:

 TableInfo{name='invoices', columns={... ,created_at=Column{name='created_at', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, approved_at=Column{name='approved_at', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, ... }

y esto como lo que se encuentra:

 TableInfo{name='invoices', columns={... ,created_at=Column{name='created_at', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='0'}, approved_at=Column{name='approved_at', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='0'}}, ... }

¿Alguien puede decirme por qué espera un valor predeterminado nulo, por favor?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Lo que creo es que está utilizando una versión de Room superior a 2.2.0 , y la versión 2.2.0 y superior necesita que los valores predeterminados de las columnas se definan en su clase de entidad respectiva usando @ColumnInfo(defaultValue="0")

Para su caso, agregue @ColumnInfo(defaultValue="0") a created_at y approved_at

 @ColumnInfo(defaultValue="0") override val created_at: Long = 0, @ColumnInfo(defaultValue="0") override var approved_at: Long? = 0,

Y cambie su función de migración a esta

 database.execSQL("ALTER TABLE invoices ADD COLUMN created_at INTEGER NOT NULL DEFAULT 0") database.execSQL("ALTER TABLE invoices ADD COLUMN approved_at INTEGER")

Si usa una versión de Room 2.4.0-alpha01 y superior, puede usar autoMigration .

Para autoMigration , agregue la anotación de autoMigrations a su base de datos

 @Database( entities = [.., .., ..], version = 2, autoMigrations = [AutoMigration(from = 1, to = 2)] ) abastract class Database: RoomDatabase
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda