DBFlow:关系(Relationships)

关系

在DBFlow 中用@Table描述的表,我们可以使用1-1, 1-many, many-to-many来联系它们。

一对一

DBFlow支持多个外键(@ForeignKey),可分别指向不同的表。
(多数情况下,这些字段也添加@PrimaryKey来注解。)

@Table(database = AppDatabase.class)
public class Dog extends BaseModel {

  @PrimaryKey
  String name;

  @ForeignKey(tableClass = Breed.class)
  @PrimaryKey
  String breed;

  @ForeignKey
  Owner owner;
}

Stubbed Relationships

考虑到效率的原因,我们强烈推荐你使用@ForeignKey(stubbedRelationship = true)。
这是为什么呢?
这将会预先配置主键的字段到你的表的对象上,其他的字段将不会被设置进去。
如果你想要访问你的对象上全部的内容,你需要调用load()方法。或者使用ModelAdapter去从数据库中加载这个对象。

对于上一个版本的dog,我建议使用Bread bread,代替String bread,这样你持有了bread对象,此时bread有了主键,所以再调用load方法,即可加载bread对象的所有字段了。

每次你调用load方法,dbflow都会从数据库中去加载数据,所以,要按需加载哦。还要注意,若你没有指定Database(foreignKeysSupported = true),调用load也许没有任何影响。

通常来说,对于从数据库中加载出来的每个dog对象,我们也会加载其owner对象一遍,那么问题来了,若我们有50条狗,那我们得加载50次owner啦?这显然不明智,所以针对owner字段,我们最好这样来注解:@ForeignKey(stubbedRelationship = true),如下

@Table(database = AppDatabase.class)
public class Dog extends BaseModel {

    @PrimaryKey
    String name;

    @ForeignKey(stubbedRelationship = true)
    @PrimaryKey
    Breed breed; // tableClass only needed for single-field refs that are not Model.

    @ForeignKey(stubbedRelationship = true)
    Owner owner;
}

一对多

在 dbflow中,使用@OneToMany去注解你的model中的方法。
这将使你的model与其它的一堆model建立起联系。

@ModelContainer
@Table(database = ColonyDatabase.class)
public class Queen extends BaseModel {

    @Column
    @PrimaryKey(autoincrement = true)
    long id;

    @Column
    String name;

    @Column
    @ForeignKey(saveForeignKeyModel = false)
    Colony colony;

    List<Ant> ants;

    @OneToMany(methods = {OneToMany.Method.ALL}, _variableName = "ants")
    public List<Ant> getMyAnts() {
        if (ants == null || ants.isEmpty()) {
            ants = SQLite.select()
                .from(Ant.class)
                .where(Ant_Table.queenForeignKeyContainer_id.eq(id))
                .queryList();
        }
        return ants;
    }
}

为什么要这样注解呢?
点击这里

多对多

一张表和另外一张表,他们之间是多对多的关系,如何维护这样的关系?
通常是再建立一张表:第三张表来维护二者的关系。

比如:
有一张 User 表,另外一张 Follower 表。
一个user会有多个follower,一个follower也有很多user。所以再搞个第三张表:User_Follower来维护他们的多对多关系。

在dbflow中,多对多(多出来的那张表)是通过代码生成的。


user
user_follower

以上代码很轻松的帮你生成了连接表(只要你注解了@ManyToMany)

自定义生成的列的名称
你可以改变生成的列的名称。

  1. referencedTableColumnName
  2. thisTableColumnName

多个多对多
你可以指定@MultipleManyToMany来帮你定义多个@ManyToMany。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,654评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,227评论 25 707
  • 2016/7/27,星期三,多云。 清晨,我起床时,程程正坐在客厅旁边的厕所门口玩,我进了厕所,把门关上,坐在马桶...
    程沐阅读 377评论 0 1
  • 看多了成功传记,觉得成功就是靠一个人不断的努力,只要努力,就能达到自己企及的高度,怀着憧憬度过了二十余年,并深信不...
    黑白书签阅读 303评论 0 0
  • 看了《七月与安生》,七月的妈妈说安生就是命不好,一直在流浪。 安生在佛像前爱上了家明,可是他是属于七月的,于是...
    只爱提子不爱葡萄阅读 121评论 0 0