DbFlow中继承BaseModel的Organization类如何创建空对象?
如何在DbFlow中创建空的Organization对象
当然可以创建空的Organization对象来存储新数据!你遇到每次创建都得到相同数据的问题,大概率是代码里不小心复用了同一个对象实例,或者你的类定义存在一些容易混淆的小问题。
先梳理你的代码问题
首先注意到你的Organization类里有一个多余的private Organization organization;成员变量——这个内部引用完全没必要,反而可能导致你误操作同一个对象实例;另外你的Person类重复定义了两次,这会导致编译错误,得删掉其中一个。
修正后的Organization类
先把Organization类调整成更清晰的结构,显式添加无参构造(虽然BaseModel已经隐含支持,但显式写出更直观):
@Table(database = MyDatabase.class) public class Organization extends BaseModel { @Column @PrimaryKey int id; // 默认值为0 @Column String name; // 默认值为null // 显式无参构造,用于创建空对象 public Organization() { super(); } // 可选:添加带参构造,方便快速初始化数据 public Organization(int id, String name) { this.id = id; this.name = name; } // Getter & Setter public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
创建空对象的正确方式
DbFlow的BaseModel支持无参构造,直接调用new Organization()就能得到一个完全空的对象,所有字段都会使用Java默认值(int类型id为0,String类型name为null):
// 创建空对象 Organization newEmptyOrg = new Organization(); // 给空对象设置新数据 newEmptyOrg.setId(1001); newEmptyOrg.setName("My New Organization"); // 保存到数据库 newEmptyOrg.save();
为什么你之前会得到相同数据?
很大概率是你复用了同一个对象实例,而不是每次创建新的。比如这种错误写法:
// 错误:复用同一个对象 Organization org = new Organization(); org.setId(1); org.setName("Org A"); org.save(); // 没有创建新对象,直接修改同一个实例 org.setId(2); org.setName("Org B"); org.save(); // 这时候是更新了之前的记录,对象还是同一个
正确的做法是每次创建新数据时都实例化新的对象:
// 正确:每次创建新实例 Organization orgA = new Organization(); orgA.setId(1); orgA.setName("Org A"); orgA.save(); Organization orgB = new Organization(); orgB.setId(2); orgB.setName("Org B"); orgB.save();
这样每次得到的都是独立的空对象,不会出现数据重复的问题。
内容的提问来源于stack exchange,提问作者samy
相关产品推荐
相关产品推荐

