db中没有外部收集字段

时间:2016-01-17 11:41:58

标签: java h2 ormlite foreign-collection

我有两个简单的类:

@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`)

我看不出我的错误!

1 个答案:

答案 0 :(得分:1)

  

Instean似乎是在&#39;运动中的ForeignCollection&#39;上课被忽略了。

是的,它有点令人困惑,但没有错。 movements表中没有任何内容引用数据库中的tags

外部集合在ORMLite中的工作方式(如hibernate和其他ORM)是tag引用了相关的movement_id,但不是相反。根据定义,movement无法获得某种tag ID列表。这就是为什么ORMLite使用另一个查询来填写tags集合的原因。它会返回您的movement,然后从id中查找movement,以查找movement_id字段中具有相同内容的代码。