数据库中不存在外部集合字段
Foreign collection field not present in db
我有两个简单的 class 像这样:
@DatabaseTable(tableName = "movements")
public class Movement {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
double amount;
@DatabaseField(foreign = true)
Category category;
@ForeignCollectionField(eager = true)
Collection<Tag> tags;
//Other stuff
}
第二个:
@DatabaseTable(tableName = "tag")
public class Tag {
@DatabaseField(generatedId = true)
int id;
@DatabaseField(foreign = true)
Movement movement;
@DatabaseField
String name;
//Other stuff
}
我对以下两个命令的期望:
TableUtils.createTable(dbConnection, Tag.class);
TableUtils.createTable(dbConnection, Movement.class);
是在 db 中创建两个 table,一次正确引用另一个。 Instean 似乎 'Movement' class 中的 ForeignCollection 被忽略了。这是可能的调试信息:
[INFO] TableUtils creating table 'tag'
[INFO] TableUtils executed create table statement changed 0 rows: CREATE TABLE `tag` (`id` INTEGER AUTO_INCREMENT , `movement_id` INTEGER , `name` VARCHAR(255) , PRIMARY KEY (`id`) )
[INFO] TableUtils creating table 'movements'
[INFO] TableUtils executed create table statement changed 0 rows: CREATE TABLE `movements` (`id` INTEGER AUTO_INCREMENT , `amount` DOUBLE PRECISION , `category_id` INTEGER , PRIMARY KEY (`id`)
我看不出我的错误!
Instean seems that the ForeignCollection inside the 'Movement' class was ignored.
是的,有点混乱,但没有错。 movements
table 中没有任何内容指向数据库中的 tags
。
foreign-collections 在 ORMLite 中的工作方式(就像 hibernate 和其他 ORM)是 tag
有一个对关联的 movement_id
的引用,但反之则不然。根据定义,movement
不能有某种 tag
id 列表。这就是 ORMLite 使用另一个查询来填充 tags
集合的原因。它 returns 你的 movement
然后它从 movement
中查找 id
以找到在 movement_id
字段中具有相同标签的标签。
我有两个简单的 class 像这样:
@DatabaseTable(tableName = "movements")
public class Movement {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
double amount;
@DatabaseField(foreign = true)
Category category;
@ForeignCollectionField(eager = true)
Collection<Tag> tags;
//Other stuff
}
第二个:
@DatabaseTable(tableName = "tag")
public class Tag {
@DatabaseField(generatedId = true)
int id;
@DatabaseField(foreign = true)
Movement movement;
@DatabaseField
String name;
//Other stuff
}
我对以下两个命令的期望:
TableUtils.createTable(dbConnection, Tag.class);
TableUtils.createTable(dbConnection, Movement.class);
是在 db 中创建两个 table,一次正确引用另一个。 Instean 似乎 'Movement' class 中的 ForeignCollection 被忽略了。这是可能的调试信息:
[INFO] TableUtils creating table 'tag'
[INFO] TableUtils executed create table statement changed 0 rows: CREATE TABLE `tag` (`id` INTEGER AUTO_INCREMENT , `movement_id` INTEGER , `name` VARCHAR(255) , PRIMARY KEY (`id`) )
[INFO] TableUtils creating table 'movements'
[INFO] TableUtils executed create table statement changed 0 rows: CREATE TABLE `movements` (`id` INTEGER AUTO_INCREMENT , `amount` DOUBLE PRECISION , `category_id` INTEGER , PRIMARY KEY (`id`)
我看不出我的错误!
Instean seems that the ForeignCollection inside the 'Movement' class was ignored.
是的,有点混乱,但没有错。 movements
table 中没有任何内容指向数据库中的 tags
。
foreign-collections 在 ORMLite 中的工作方式(就像 hibernate 和其他 ORM)是 tag
有一个对关联的 movement_id
的引用,但反之则不然。根据定义,movement
不能有某种 tag
id 列表。这就是 ORMLite 使用另一个查询来填充 tags
集合的原因。它 returns 你的 movement
然后它从 movement
中查找 id
以找到在 movement_id
字段中具有相同标签的标签。