You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:31:56