android - 在 Green Dao 注释实体中使用 Embedded POJO 类
问题描述
我想在我的持久实体中使用嵌入式 POJO 类。
需要匹配我的 android 应用程序中的服务器数据模型。应用程序使用 GreeanDao 框架作为 DB DAO 层和自写的基于注释的库与服务器进行数据交换* *我只想提一下,重写库以匹配限制也是一种解决方案,但在此之前,我想弄清楚如果有自然的方式或现有的用例。
我相信我可以@Transient
在我的 POJO 字段中使用注释并将 POJO 字段的副本保留在 Entity 类中,而不仅仅是弄乱复制字段的设置器和构造函数 Green Daou 依赖于初始化 POJO 字段。但如果你问我,这听起来有点笨拙。
public class Person{
private String firstName, secondName;
private int age;
/* getters and setters */
}
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Keep;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Transient;
import org.greenrobot.greendao.annotation.Generated;
@Entity
public class Employee {
@Id(autoincrement = true)
private long id;
@Transient
private Person person;
@Property(nameInDb = "PERSON_FIRST_NAME")
private String firstName;
@Property(nameInDb = "PERSON_SECOND_NAME")
private String secondName;
@Property(nameInDb = "PERSON_AGE")
private int age;
@Keep
public Employee(long id, String firstName, String secondName, int age) {
this.id = id;
this.firstName = firstName;
this.secondName = secondName;
this.age = age;
initPerson();
}
@Generated(hash = 202356944)
public Employee() {
}
private void initPerson(){
if(this.person == null)
this.person = new Person();
person.setFirstName(this.firstName);
person.setSecondName(this.secondName);
person.setAge(this.age);
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
this.setAge(person.getAge());
this.setFirstName(person.getFirstName());
this.setSecondName(person.getSecondName());
}
public void setFirstName(String firstName) {
this.firstName = firstName;
initPerson();
}
public void setSecondName(String secondName) {
this.secondName = secondName;
initPerson();
}
public void setAge(int age) {
this.age = age;
initPerson();
}
/* some getters etc */
}
解决方案
我用类似的方法解决了这个问题,但几乎没有修改。我一直使用注释 ToOne。检查字符串 personId 而不是 person 很重要。
@Entity
public class Employee {
@Id(autoincrement = true)
private long id;
private String personId;
@ToOne(joinProperty = "personId")
private Person person;
@Keep
public Employee(long id) {
this.id = id;
initPerson();
}
@Generated(hash = 202356944)
public Employee() {
}
private void initPerson() {
if (this.personId == null){
Person person = new Person();
person.setFirstName(this.firstName);
person.setSecondName(this.secondName);
person.setAge(this.age);
setPerson(person)
}
}
/** called by internal mechanisms, do not call yourself. */
@Generated(hash = 472550346)
public void setPerson(Person person) {
synchronized (this) {
this.person= person;
personId = person == null ? null : person.getId();
person__resolvedKey = personId;
}
}
/* some getters etc */
}
推荐阅读
- c# - fo-Dicom - 如何从 DicomFile 中提取图像帧
- angular - rxjs 6 可观察
可观察的 - c# - 在 C# 中使用子字符串时 Fortify Null Deference 中的问题
- algorithm - 使用哪种机器学习算法和工具来建议使用哪些箱以及数量?
- javascript - 使用 firebase 和 js 注册和重定向到主页时出现问题
- python - 如何从 ReactJS 和 Python 通信数据?
- r - httr GET 挂起,但 download.file 有效
- python - 转置卷积层中可训练参数的数量
- javascript - 颁发未签名的可验证凭证时出现 IOTA 身份错误
- powershell - 如何在 Powershell 中查找和替换字符串