Android ORM lite复合主键(来自两个字段)或多对多关系

时间:2016-03-08 21:26:57

标签: android orm

我正在使用orm lite库,通过这种方式在一对多关系中非常好:

@DatabaseTable(tableName = "a")
class A {
    @DatabaseField(id = true)
    private Integer id;
    ...
}

@DatabaseTable(tableName = "b")
class B {
    @DatabaseField(id = true)
    private Integer id;

    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = "a_id")
    private A a;
    ...
}

现在,我如何创建多对多关系?我有一些想法,但我做不到, 想法 - 我以这种方式创建了A,B和AB类

@DatabaseTable(tableName = "a")
class A {
    @DatabaseField(id = true)
    private Integer id;
    ...
}

@DatabaseTable(tableName = "b")
class B {
    @DatabaseField(id = true)
    private Integer id;
    ...
}

@DatabaseTable(tableName = "ab")
class AB {
    @DatabaseField(id = true)
    private Integer id;

    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = "a_id")
    private A a;

    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = "b_id")
    private B b;
}

我想把AB类的主键作为主键(a,b)并删除id列或make uniuqe(a,b)我可以做任何一个吗?

1 个答案:

答案 0 :(得分:1)

1
。我认为在ORMLite中实现多对多关系的唯一方法 - 使用你建议的第三个表。你可以看一下这个答案:https://stackoverflow.com/a/9179937/5318705
2。我这次没有可能创建复合PK。但是,无论如何,您可以将伪ID字段保留为PRIMARY KEY并使用uniqueCombo约束:

...
@DatabaseField(id = true)
    private Long dummyId;

@DatabaseField(uniqueCombo = true)
    private Integer idA;

@DatabaseField(uniqueCombo = true)
    private Integer idB;
...