I'm trying to extract a subset of values/columns from a junction table as follows
@Entity
class Conversation {
@PrimaryKey
@ColumnInfo(name = "id")
@NonNull
String id = UUID.randomUUID().toString();
}
@Entity
class User {
@PrimaryKey
@ColumnInfo(name = "id")
int id;
@ColumnInfo(name = "first_name")
String firstName;
@ColumnInfo(name = "last_name")
String lastName;
@ColumnInfo(name = "image")
String image;
}
class SimpleUser {
@ColumnInfo(name = "first_name")
String firstName;
@ColumnInfo(name = "last_name")
String lastName;
}
@Entity(
primaryKeys = {"conversation_id", "user_id"},
foreignKeys = {
@ForeignKey(
entity = Conversation.class,
parentColumns = "id",
childColumns = "conversation_id"
),
@ForeignKey(
entity = User.class,
parentColumns = "id",
childColumns = "user_id"
)
},
indices = {
@Index("conversation_id"),
@Index("user_id")
}
)
class ConversationUser {
@ColumnInfo(name = "conversation_id")
@NonNull
String conversationId = UUID.randomUUID().toString();
@ColumnInfo(name = "user_id")
int userId;
}
class ConversationSimpleUserList {
@Relation(
parentColumn = "conversation_id",
entityColumn = "id",
associateBy = @Junction(
value = ConversationUser.class,
parentColumn = "conversation_id",
entityColumn = "user_id"
),
projection = {
"first_name", "last_name"
}
)
List<SimpleUser> simpleUserList; <- I want users without all the fields I will not be using
}
However it throws the following error:
Cannot find the child entity column `id` in SimpleUser
Is this not possible to do? I couldn't find any documentation or examples showing how to do something like this.
Have you tried to use entity class name in Relation explicitly?
Since Room couldn't find id
field in SimpleUser
class - but in base User
class there is such a field:
class ConversationSimpleUserList {
.....
@Relation(
entity = User.class, // <-- explicitly added entity
parentColumn = "conversation_id",
entityColumn = "id",
associateBy = @Junction(
.........
}