数据库中不存在外部集合字段

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 字段中具有相同标签的标签。