DBFlow一对多示例

时间:2015-12-25 14:41:30

标签: android database orm flow

在DBFlow git的入门页面中: https://github.com/Raizlabs/DBFlow/blob/master/usage/GettingStarted.md

他们解释了如何创建一对多的关系,但有一件事情并不清楚,Android Studio会抱怨这些部分:

。凡(的 Ant_Table 即可。的 queenForeignKeyContainer_id .EQ(ID))

Ant_Table来自哪里?是否需要任何声明?

同样适用于queenForeignKeyContainer_id。

5 个答案:

答案 0 :(得分:4)

  
      
  1. Ant_Table来自哪里?
  2.   

queenForeignKeyContainer_id不需要声明。该类只是在编译项目后生成的(实际上DBFlow使用java注释来生成这些源代码)。

所以你可以先评论这些错误的代码,然后编译这些模型类。然后DBFlow为您生成一些代码,现在您可以取消注释这些代码。

  1. <div class="row"> <div class="overflowing"></div> <div class="float_left"></div><div class="float_left"></div> <div class="float_right"></div> </div> 也由DBFlow生成。

答案 1 :(得分:0)

我有同样的问题。最后通过将where条件建模为字符串来解决它,如下所示:

String fieldName = MyDBEntry$Table.NOTIFICATIONID;
long value = parent.getId();
final String whereClause = String.format("%s = %d", fieldName, value);
TransactionManager.getInstance().addTransaction(
    new SelectListTransaction<>(
        new Select().from(MyDBEntry.class)
            .where(whereClause),
                new TransactionListenerAdapter<List<MyDBEntry>>() {
                    @Override
                    public void onResultReceived(List<MyDBEntry> dbList) {
                        ...
                    }
                })
);

只需将fieldName和value替换为您想要的值

答案 2 :(得分:0)

如果Ant_Table未编译,请确保已设置Application类。 Ant_Table作为最终类以及外键成员,表示您添加到模式中以关联两个表的内容。 在文档中更不用说它真的很混乱。

答案 3 :(得分:0)

@Table(database = AppDatabase.class)
public class Department extends BaseModel {

@Column
@PrimaryKey(autoincrement = true)
private int d_id;

@Column
@Unique
public String department_name;

public String getDepartment_name() {
    return department_name;
}

public void setDepartment_name(String department_name) {
    this.department_name = department_name;
}

public int getD_id() {
    return d_id;
}


public void setD_id(int d_id) {
    this.d_id = d_id;
}
}

这是我的部门表

@Table(database = AppDatabase.class)

public class CompleteProfile extends BaseModel {


    @Column
    @PrimaryKey(autoincrement = true)
    int id;

    @Column
    @Unique
    private String stud_username;

    @Column
    @Unique
    private String stud_password;

    @Column
    private int d_id;


    public String getStud_username() {
        return stud_username;
    }

    public void setStud_username(String stud_username) {
        this.stud_username = stud_username;
    }

    public String getStud_password() {
        return stud_password;
    }

    public void setStud_password(String stud_password) {
        this.stud_password = stud_password;
    }

    List<Department> departments;

    @OneToMany(methods = OneToMany.Method.ALL, variableName = "departments")
    public List<Department> dbFlowOneTwoManyUtilMethod() {
        if (departments == null) {
            departments = SQLite.select()
                    .from(Department.class)
                    .where(Department_Table.d_id.eq(d_id))
                    .queryList();
        }
        return departments;
    }

    public void setD_id(int d_id) {
        this.d_id = d_id;
    }

    public int getD_id() {
        return d_id;
    }
}

完成个人资料表(模型类)引用部门表,d_id是外键

 Cursor cursor = new Select(Department_Table.department_name, CompleteProfile_Table.stud_username, CompleteProfile_Table.stud_password)
                    .from(Department.class)
                    .join(CompleteProfile.class, Join.JoinType.INNER)
                    .on(Department_Table.d_id.withTable()
                            .eq(CompleteProfile_Table.d_id.withTable())).query();

            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                Log.e("USERNAME=", cursor.getString(1));
                Log.e("PASSWORD=", cursor.getString(2));
                Log.e("DEPARTMENT NAME=", cursor.getString(0));


                cursor.moveToNext();
            }
            // make sure to close the cursor
            cursor.close();

这是从两个表

中获取数据的查询

答案 4 :(得分:-1)

好的,所以当我尝试制作项目时,我没有看到显示的gradle构建错误。

但即使有了这个消息,它仍然不清楚。我需要执行以下操作:文件&gt; Invalidate caches / restart

重新启动后,当我再次尝试制作项目时,错误很明显。 似乎DBFlow没有足够的信息来确定哪些字段可以/应该可见或(在我的情况下,私有),所以我有一个带有getter和setter的私有主键,这导致了外键问题。

刚删除了私有,问题就解决了。