我有2个安卓室表book和persons。每本书都有一个外键,叫做owner_id,它把它分配给一个人的实体。 我现在试图得到一个地图,给我一个书与每个人的列表。
为此,我在我的DAO类中使用这个方法。
@Transaction
@Query("SELECT * FROM books JOIN persons ON persons.id = book.owner_id")
public abstract Map<Person, List<Book>> getMap();
这将返回一个像这样的地图。
而不是我的理想结果。
我的房间班级是这样的。
@Entity
public class Person {
@NonNull
@PrimaryKey
public UUID id;
public String name="";
@Override
public boolean equals(@Nullable Object obj) {
if(obj instanceof Person)
return ((Person) obj).equals(id);
return super.equals(obj);
@Override
public int hashCode() {
return id.hashCode();
@Entity
public class Book {
@NonNull
@PrimaryKey
public UUID id;
public UUID owner_id;
public String name="";
@Override
public boolean equals(@Nullable Object obj) {
if(obj instanceof Book)
return ((Book) obj).equals(id);
return super.equals(obj);
@Override
public int hashCode() {
return id.hashCode();
@Database(entities = {Person.class,Book.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class LibarayDB extends RoomDatabase {
public abstract LibarayDBdao libarayDBdao();
我怎样才能使返回的地图只包含关键的Person X一次,并有一个列表的
书籍A和书籍B作为一个值?