我有两个像这样的简单类:
@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/