我真的不明白房间关系是如何工作的,我正在尝试插入两个相关的表,许多ORM可以做到这一点,例如将Person和Books插入到表中,而不必设置书籍的id(其中与人有关) .

我能够让房间返回人员和相关的书籍那里的人,但我无法插入(如果有),我没有找到信息,如果它有一个形状 .

@Entity(tableName = "books")
public class Book {

    @PrimaryKey(autoGenerate = true)
    private long id;
    @ColumnInfo(name = "person_id")
    private int personId;
    private String name;
    private String author;
    //@ColumnInfo(name = "release_date")
    @Ignore
    private Date releaseDate;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public int getPersonId() {
        return personId;
    }

    public void setPersonId(int personId) {
        this.personId = personId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getReleaseDate() {
        return releaseDate;
    }

    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }
}

@Entity
public class Person {

    @PrimaryKey(autoGenerate = true)
    private long id;
    @ColumnInfo(name = "first_name")
    private String firstName;
    @ColumnInfo(name = "last_name")
    private String lastName;
    private int age;
    private String email;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

@Dao
public interface PersonBookDao {

    @Query("SELECT * FROM person")
    List<PersonWithBook> loadPersonsAndBooks();

    //@Insert
    //void insert(PersonWithBook personWithBook);

}

所以我通常使用Book和Person dao接口进入,我试图将@Insert注释放在PersonBookDao类中,但是错误,声明它必须是Entity .

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AppDatabase db = AppDatabase.getAppDatabase(this);

        Person person = new Person();
        person.setFirstName("Aaaaaa");
        person.setLastName("Bbbbbbb");
        person.setAge(26);
        person.setEmail("fdsfsd@gmail.com");

        db.personDao().insert(person);

        List<Book> bookList = new ArrayList<>();
        Book book = new Book();
        book.setAuthor("AAAAAAA");
        book.setName("Nnnnnnn");
        book.setPersonId(1);
        bookList.add(book);

        PersonWithBook personWithBook = new PersonWithBook();
        personWithBook.person = person;
        personWithBook.bookList = bookList;

        db.bookDao().insert(book);

        //List<PersonWithBook> pb = db.personBookDao().loadPersonsAndBooks();
        //Log.d("aaaaaaaa", pb.get(0).person.getEmail());
    }
}

一切都让我相信在房间里它是不可能的......但我想确定它是否真的不起作用,或者除了插入Person类的ID之外还有更好的方法 .