房间桌子之间的关系Android



我正在开发一个聊天应用程序。我有两个实体

@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);

最新更新