Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.1K
Views
Cómo resolver "Las entidades y los POJO deben tener un constructor público utilizable"

He visto esta pregunta varias veces en SO. sin embargo, la solución no parece aplicarse a mi problema.

Tengo una clase de datos de Kotlin que se usa como entidad en la sala.

 @Entity(tableName = "training_session") data class SessionEntity( @PrimaryKey(autoGenerate = false) val id: Long, @ColumnInfo(name = "current_state_marker") val currentState: Short, @Embedded val states: List<Int> )

esta produciendo

 > Task :training-infrastructure:kaptDebugKotlin FAILED error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List

En el mismo proyecto tengo una entidad muy similar que también tiene una lista y eso no produce ningún error.


Probé la respuesta proporcionada por MikeT , para mí requirió un pequeño cambio en la forma en que se definieron los convertidores.

 data class SessionStateList (val stateList : List<Int>) class SessionStateListConverter { @TypeConverter fun fromArraySessionStateList(sh: List<Int>?): String? { return Gson().toJson(sh) } @TypeConverter fun toArraySessionStateList(sh: String?): List<Int>? { val listType: Type = object : TypeToken<ArrayList<Int?>?>() {}.type return Gson().fromJson(sh,listType) } }

Un seguimiento rápido. Mencioné que tengo otra entidad que tiene un Embedded val something: List<Int> y no noté ningún error de compilación.

La razón por la que no noté ningún error del compilador fue porque la entidad no estaba incluida en la anotación @Database .

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No puede tener una lista/matriz, etc. como tipo de columna. Por lo tanto, su problema se centra en @Embedded val states: List<Int>

Podría tener un POJO, por ejemplo, StatesHolder: -

 data class StatesHolder( val stateList: List<Int> )

y luego tener

 @Entity(tableName = "training_session") data class SessionEntity( @PrimaryKey(autoGenerate = false) val id: Long, @ColumnInfo(name = "current_state_marker") val currentState: Short, val states: StatesHolder )
  • Tenga en cuenta que no puede incrustar StatesHolder ya que eso solo inserta List. Si desea incrustar, debe incrustar un contenedor que use un StatesHolder.

Luego necesitará TypeConverters para convertir hacia y desde un objeto StatesHolder a un tipo que se pueda almacenar. Probablemente una cadena y probablemente una representación JSON del objeto StatesHold, por ejemplo

 class Converters { @TypeConverter fun fromStatesHolder(sh: StatesHolder): String { return Gson().toJson(sh) } @TypeConverter fun toStatesHolder(sh: String): StatesHolder { return Gson().fromJson(sh,StatesHolder::class.java) } }

Además, debe usar la anotación @TypeConverters que define la clase Converts::. Si se codifica en el nivel @Database, los convertidores tienen alcance completo.

Entonces, después de @Database(.....) podrías tener: -

 @TypeConverters(Converters::class)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!