java - 插入两个实体并加入主键
问题描述
我试图同时将数据插入两个表,同时将表 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。
解决方案
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);
}
推荐阅读
- docker - Dockerfile:使用 ADD 文件作为 dockerfile 的第一行,而不是 FROM
- r - 如何将空行添加到数据框中并将其准确放置在两个特定的现有行之间?
- python - 使用 itertools 限制排列
- vue.js - 带有 Vuex 4 的 VueJS 3:状态未更新
- html - 当我在一个部分中使用 marging 时,我得到了空白
- java - 如何使用javaparser获取类方法中使用的变量名
- sql - 按表oracle sql的两列之间的时间差分组
- java - Eclipse Hono 命令行客户端无法连接到 Sandbox 上的 Hono
- r - 多个变量的可变移码滚动平均值
- mysql - 使用 MySQL 存储图像并确保数据完整性