我有我在一间实体正在嵌入一个POJO;请注意,POJO是一个库模块中定义;
@Entity
public class Person {
@PrimaryKey
@NonNull
private String uuid;
@Embedded
@NonNull
private Address address;
public Person(@NonNull String uuid, @NonNull Address address) {
this.uuid = uuid;
this.address = address;
}
@NonNull
public String getUuid() {
return uuid;
}
@NonNull
public Address getAddress() {
return address;
}
}
public class Address {
@NonNull
private String street;
@NonNull
private String city;
public Address(@NonNull String street, @NonNull String city) {
this.street = street;
this.city = city;
}
@NonNull
public String getStreet() {
return street;
}
@NonNull
public String getCity() {
return city;
}
}
@Dao
public interface PersonDao {
@Query("SELECT * FROM Person")
List<Person> getPersons();
}
@TypeConverters(DateConverter.class)
@Database(entities = {Person.class}, version = 1, exportSchema = false)
public abstract class PersonDb extends RoomDatabase {
private static volatile PersonDb INSTANCE;
public abstract PersonDao getPersonDao();
}
编译失败
“错误:实体和POJO必须有一个可用的公共构造你可以有一个空的构造或构造方法的参数匹配字段(按名称和类型)。”错误:无法现场找到的制定者。
如果我从构造函数参数删除@NonNull
注释地址POJO,代码编译罚款。此外,如果同一POJO是应用程序模块,代码编译。
可以看出,Address
类并具有公共构造函数。
我缺少的是在这里吗?什么是房间的角度来看,usable constructor
的定义是什么?或者,它是与房间的问题吗?
uuid
和address
被声明为private
在Person
,你有这些,但没有制定者干将。所以,你可以创建setter方法或把他们定义为public
。