Error de la database de la sala Android: parámetro no utilizado: días en la function @Query

Estoy utilizando Room databse, tratando de escribir una consulta en mi Dao, que eliminará todos los loggings anteriores a la cantidad específica de días. Aquí es a lo que recurro:

@Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')") fun deleteAllOlderThan(days: Int) 

Sin embargo, cuando bash build mi proyecto, aparece un error en mi console de Gradle:

error: parámetro no utilizado: días

Estoy usando Kotlin, así que también me muestra esto:

Error: ejecución fallida para la tarea ': nexo: kaptDebugKotlin'. Error interno del comstackdor Ver logging para más detalles

¿Qué está mal con mi Query?

ACTUALIZAR

También recibo un error sobre la conversión de Fecha. Aquí está mi convertidor:

 class Converter { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 

También lo estoy agregando a mi Base de datos con anotación:

 @TypeConverters(Converter::class) 

Aquí hay un error específico que recibo:

No se puede averiguar cómo save este campo en la database. Puede considerar agregarle un convertidor de tipo. e: e: final privado java.util.Date dateFrom = null;

RESUMEN

  1. Estaba tratando de usar el convertidor con class sellada que en la sala causa problemas, así que decidí mantener mi parámetro de date como largo.

  2. Verifique la respuesta de Emmanuel S. Debería ser:

     @Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int) 

Creo que CW ya dio la respuesta para su problema de días.

Tus días deben citarse como una cadena como

 "-20 day" @Query("DELETE FROM my_table WHERE dateFrom <= date('now', :days)") fun deleteAllOlderThan(days: String) 

Si no funciona, concat puede ayudar.

Tratar:

 @Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int) 

Para su problema con el convertidor, es posible que desee utilizar

 @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time 

que funciona bien

No uses un object compañero. Solo usa

 class DBConverters { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 

y agrega el convertidor a tu class abstracta de DB como

 @TypeConverters(DBConverters::class) abstract class YourDb : RoomDatabase() {} 
  • Android (Kotlin): sobrescribe el nombre para la input del logging de llamadas
  • Por qué las entidades Room no funcionan con properties inmutables en Android
  • Causado por: android.database.sqlite.SQLiteException: cerca de "org": error de syntax (código 1):, al comstackr:
  • Kotlin Closable y SQLiteDatabase en Android
  • ¿Cómo puedo unirme a tres entidades en GreenDao?