首页 > 解决方案 > 插入两个实体并加入主键

问题描述

我试图同时将数据插入两个表,同时将表 1 中的主键插入表 2。

实体 1:

@Entity (tableName = "all_equip")
public class EquipInfo implements Comparable <EquipInfo>{

@PrimaryKey (autoGenerate = true)
private int equipId;
private int gymId;
private int userId;
private boolean isActive;
private String equipGrade;
...other 

实体 2:

@Entity (tableName = "my_equip_data")
public class MyEquipData {
@PrimaryKey (autoGenerate = true)
private int id;
private int userId;
private int equipId;
...other 

我需要的是,当一个新的实体 1 插入到 all_equip 中时,一个新的实体 2(它包含用户特定的数据)也被插入到 my_equip_data 中,但主键(equipId)来自实体 1。

我正在使用带有 Room 和简单@Insert查询的 SQLite。

我的道:

@Dao
public interface EquipInfoDao {
@Insert
void insert (EquipInfo equipInfo);

我的实用程序:

public Boolean addNewEquip (Context context, EquipInfo equipInfo) {
    Database.getInstance(context).equipInfoDao().insert(equipInfo);
    return true;
}

我已设法在其他查询中加入这些表,但不确定如何插入第一个实体,检索该新插入条目的equipId,然后将其作为外键添加到第二个实体中。多合一 OnClickListener。

标签: javaandroidsqliteandroid-room

解决方案


Room 允许您通过将返回类型指定为来从插入查询返回主键long。所以你可以在一个事务中运行两个插入,第二个使用返回的键。像这样的东西:

@Insert
long insert1(Entity1 e)

@Insert
void insert2(Entity2 e)

@Transaction
insertBoth(Entity1 e1, Entity2 e2) {

    long primaryKey1 = insert(e1);
    e2.setKey1(primaryKey1);
    insert(e2);
}

推荐阅读