我真的不明白房间关系是如何工作的,我正在尝试插入两个相关的表,许多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之外还有更好的方法 .