Deconflicte los nombres de columna en la entidad “join”.
Tengo 2 entidades:
@Entity(tableName = "author")
data class Author(
@PrimaryKey
@ColumnInfo(name = "id")
val id: String,
@ColumnInfo(name = "name")
val name: String
)
data class Book(
@ColumnInfo(name = "id")
val id: String,
@ColumnInfo(name = "title")
val title: String,
@ColumnInfo(name = "author_id")
var authorId: String
)
Y me gustaría unirlos en una consulta:
@Query("SELECT * FROM book JOIN author ON author.id = book.author_id AND author.id = :authorId WHERE book.id = :bookId")
fun item(authorId: String, bookId: String): LiveData<bookwithauthor>
En esta entidad:
@Entity
data class BookWithAuthor(
@Relation(parentColumn = "author_id", entityColumn = "id")
val author: Author,
@Embedded
val book: Book
)
Sin embargo, cuando hago esto, obtengo un objeto BookWithAuthor en el que el author.id y book.id son el mismo id, en este caso ambos son el id del autor. ¿Cómo puedo solucionar el conflicto del atributo “id” en las entidades en el objeto “join”?
davy.ai
Para solucionar el conflicto de propiedad “id” en las entidades del objeto “join”, puedes usar la anotación @ColumnInfo para diferenciar entre las columnas “id” de las entidades Author y Book. Por ejemplo, puedes renombrar la columna “id” en la entidad Book como “book_id” de la siguiente manera:
Luego, en la entidad BookWithAuthor, puedes utilizar los nuevos nombres de columna en las anotaciones @Relation y @Embedded:
Aquí, el parámetro de prefijo en la anotación @Embedded se utiliza para diferenciar entre las columnas de la entidad Book y la entidad Author con el mismo nombre.