我正在开发一个聊天应用程序。我有两个实体
@Entity(tableName = "messages")
public class MessageItem {
@PrimaryKey
private Integer msgId;
@ColumnInfo(name = "from_id")
private String contact_id;
}
和
@Entity(tableName = "contact")
public class Contact{
@PrimaryKey
private Integer id;
@ColumnInfo(name = "contact_phone")
private String phone;
}
在MessageDao中,我想获得与MessageItem中的Contact_id相对应的联系人电话
有三种方法可以做到这一点。
1(您可以使用带有@Embedded和@Relation的POJO,在这种情况下,您将返回带有联系人的MessageItem,例如:-
public class MessageItemWithContact {
@Embedded
MessageItem messageItem;
@Relation(entity = Contact.class, parentColumn = "from_id", entityColumn = "id")
Contact contact;
}
以及@Query,例如:-
@Transaction
@Query("SELECT * FROM messages WHERE msgId=:msgId")
MessageItemWithContact getMessageByIdWithContact(int msgId);
2(或者您可以使用带有@Embedded的POJO和使用JOIN的手机的附加变量,例如:-
public class MessageItemWithPhone {
@Embedded
MessageItem messageItem;
String phone;
}
与@Query类似:-
@Query("SELECT msgId, contact_phone, from_id FROM messages JOIN contact On from_id = id ")
List<MessageItemWithPhone> getMessItemWithContactPhone();
- 不需要@Transaction,因为查询是单个事务(而之前的方法Room获取MessageItem,然后构建查询以获取相关对象(
- 该查询获取所有MessageItems(因为未包含WHERE子句(
3(只需使用相关MessageItem的from_Id即可获得电话,而无需使用POJO,方法是使用类似于以下的@Query:-
@Query("SELECT contact_phone FROM contact WHERE id=:from_Id")
String getPhoneById(String from_Id);