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

标签 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);

是在数据库内创建两个表,并且对另一个表具有一次正确的引用。 Insean 似乎忽略了“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`)

我看不到我的错误!

最佳答案

Instean seems that the ForeignCollection inside the 'Movement' class was ignored.

是的,有点令人困惑,但没有错误。 movements里什么都没有引用 tags 的表在数据库中。

外部集合在 ORMLite(如 hibernate 和其他 ORM)中的工作方式是 tag引用了相关的movement_id ,但反之则不然。一个movement不能有 tag 的某种列表根据定义,id。这就是为什么 ORMLite 使用另一个查询来填写 tags Collection 。它返回您的 movement然后它查找 id来自movement查找movement_id中具有相同的标签字段。

关于java - 数据库中不存在外部集合字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34837916/

相关文章:

android - FTS3 在 ORMLite 中搜索?

java - 如何在运行时通过 netbeans 窗口向 java 应用程序提供输入?

java - jsps 给了我一堆错误,可能是由于 DOCTYPE

java - Hibernate3.5 是否支持 GlassfishV2 上的 JPA1+EJB3.0?

java - 如何替换 H2 数据库中的枚举类型?

java - Spring Boot、Hibernate 和 flyway 数据库问题

java - 没有 codegen 的 jOOQ H2 区分大小写问题

java - JVM如何执行继承树结构?

java - 为什么 DAO 方法在 ORMLite 中这么慢?

java - 用于操作数据库的类,可在 Android 和 Java 桌面上运行