在DBFlow git的入门页面中: https://github.com/Raizlabs/DBFlow/blob/master/usage/GettingStarted.md
他们解释了如何创建一对多的关系,但有一件事情并不清楚,Android Studio会抱怨这些部分:
。凡(的 Ant_Table 即可。的 queenForeignKeyContainer_id .EQ(ID))
Ant_Table来自哪里?是否需要任何声明?
同样适用于queenForeignKeyContainer_id。
答案 0 :(得分:4)
- Ant_Table来自哪里?
醇>
queenForeignKeyContainer_id
不需要声明。该类只是在编译项目后生成的(实际上DBFlow使用java注释来生成这些源代码)。
所以你可以先评论这些错误的代码,然后编译这些模型类。然后DBFlow为您生成一些代码,现在您可以取消注释这些代码。
<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的私有主键,这导致了外键问题。
刚删除了私有,问题就解决了。