@Entity class Transacao( @PrimaryKey(autoGenerate = true) val id: Long = 0, val valor: BigDecimal = BigDecimal.ZERO, @ForeignKey( entity = Categoria::class, parentColumns = ["id"], childColumns = ["categoriaId"], onUpdate = CASCADE, onDelete = CASCADE ) val categoriaId: Long = 0, val tipo: Tipo, val data: Calendar = Calendar.getInstance() //val nomeCategoria:String? = null (não deve haver na tabela essa coluna) )
@Entity class Categoria (@PrimaryKey(autoGenerate = true) val id: Long = 0, val nome: String, val tipo: Tipo)
. . . @Query("SELECT t.*, c.nome AS nomeCategoria FROM transacao t JOIN categoria c ON t.categoriaId = c.id") fun pegaTudo(): MutableList . . .
A questão é: a entidade Transacao deve ter uma propriedade nomeCategoria:String que vai conter o valor da propriedade "nome" da entidade Categoria cuja propriedade "categoriaId" da entidade Transacao representa, mas essa propriedade "nomeCategoria" não deve refletir na construção da tabela "categoria". A tabela "transacao" deve ter todas as propriedades da sua entidade mas não uma coluna "nomeCategoria", entretanto o objeto/entidade Transacao deve ter essa propriedade "nomeCategoria", mas essa só será preenchida quando a função pegaTudo() for usada. Para todas as outras chamadas essa propriedade deve vir nula. O objetivo é evitar fazer múltiplas chamadas ao banco quando precisar montar uma lista de "transação" e evitar colunas em duplicidade no banco. Como posso fazer isso?