我有两个简单的类:
@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中创建两个表,其中右引用一次到另一个。 Instean似乎忽略了'Movement'类中的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`)
我看不出我的错误!
答案 0 :(得分:1)
Instean似乎是在&#39;运动中的ForeignCollection&#39;上课被忽略了。
是的,它有点令人困惑,但没有错。 movements
表中没有任何内容引用数据库中的tags
。
外部集合在ORMLite中的工作方式(如hibernate和其他ORM)是tag
引用了相关的movement_id
,但不是相反。根据定义,movement
无法获得某种tag
ID列表。这就是为什么ORMLite使用另一个查询来填写tags
集合的原因。它会返回您的movement
,然后从id
中查找movement
,以查找movement_id
字段中具有相同内容的代码。