如何获得新插入实体的自动生成的主键?

时间:2019-08-05 14:49:18

标签: android sqlite kotlin android-room

我有一个这样定义的实体:

@Entity
data class Data(
    @PrimaryKey(autoGenerate = true) val uid: Int = 0,
    var name: String,
)

然后我使用这种方法将实例插入数据库中

@Insert
fun insert(data: Data)

插入实例可能如下所示:

MainActivity.db.dao().insert(Data(0, "Blub"))

现在,我想知道插入时自动生成的主键。我如何获得它?

1 个答案:

答案 0 :(得分:3)

使用:

@Test
public void nestedMapFlattenerTest() {
    Map<Integer, Map<Integer, Map<Integer, Integer>>> threeFoldNestMap = new HashMap<Integer, Map<Integer, Map<Integer, Integer>>>() {{
        put(
                1,
                new HashMap<Integer, Map<Integer, Integer>>() {{
                    put(
                            11,
                            new HashMap<Integer, Integer>() {{
                                put(111, 1110);
                                put(112, 1120);
                            }}
                    );
                    put(
                            12,
                            new HashMap<Integer, Integer>() {{
                                put(121, 1210);
                                put(122, 1220);
                            }}
                    );
                }}
        );
        put(
                2,
                new HashMap<Integer, Map<Integer, Integer>>() {{
                    put(
                            21,
                            new HashMap<Integer, Integer>() {{
                                put(211, 2110);
                                put(212, 2120);
                            }}
                    );
                    put(
                            22,
                            new HashMap<Integer, Integer>() {{
                                put(221, 2210);
                                put(222, 2220);
                            }}
                    );
                }}
        );
        put(
                3,
                new HashMap<Integer, Map<Integer, Integer>>() {{
                    put(
                            31,
                            new HashMap<Integer, Integer>() {{
                                put(311, 3110);
                                put(312, 3120);
                            }}
                    );
                    put(
                            32,
                            new HashMap<Integer, Integer>() {{
                                put(321, 3210);
                                put(322, 3220);
                            }}
                    );
                }}
        );

    }};


     nestedMapFlattener(threeFoldNestMap)
        .map(o -> (Map.Entry<Integer, Map.Entry<Integer, Map.Entry<Integer, Integer>>>) o)
        .map(o -> "" + o.getKey() + " " + o.getValue().getKey() + " " + o.getValue().getValue().getKey() + " " + o.getValue().getValue().getValue())
        .forEach(System.out::println);
    //prints:
    //1 11 112 1120
    //1 11 111 1110
    //1 12 121 1210
    //1 12 122 1220
    //2 21 211 2110
    //2 21 212 2120
    //2 22 221 2210
    //2 22 222 2220
    //3 32 321 3210
    //3 32 322 3220
    //3 31 311 3110
    //3 31 312 3120
}

这将返回rowId。 rowId不一定是您的整数,but it will be a primary key我认为它始终与自动生成的整数相同,但是我找不到关于它的任何真实文档。