您能否依赖于从多行插入返回的Android房间ID的顺序
我在当前Android应用程序中使用我的本地数据库空间 我有一个一对多父子表关系,我想插入多个父行,接收自动生成的Id作为列表返回,然后每个父Id插入多个子 我可以相信Room会以与我传递给INSERT语句的父行相同的顺序返回自动生成的父ID吗 我一次接收200个父行,这意味着我不想插入单个父行,因为这种方法会降低性能 是否有任何方法可以插入多个父->子行一个2个多行,并让子行自动接收父自动生成的id 是否有任何方法可以插入多个父->子行一个2个多行,并让子行自动接收父自动生成的id 我怀疑这种方法是否存在。虽然您可以考虑下一个解决方案(当然它有一些缺点,但如果您在特定的情况下是合适的),可以在插入之前获得最大的<代码> ID <代码>,并在代码< >父< /代码>和<代码>子< /代码>实体中明确设置<代码> ID >代码>。假设您有200个项目要插入。您将获得最大电流您能否依赖于从多行插入返回的Android房间ID的顺序,android,android-room,Android,Android Room,我在当前Android应用程序中使用我的本地数据库空间 我有一个一对多父子表关系,我想插入多个父行,接收自动生成的Id作为列表返回,然后每个父Id插入多个子 我可以相信Room会以与我传递给INSERT语句的父行相同的顺序返回自动生成的父ID吗 我一次接收200个父行,这意味着我不想插入单个父行,因为这种方法会降低性能 是否有任何方法可以插入多个父->子行一个2个多行,并让子行自动接收父自动生成的id 是否有任何方法可以插入多个父->子行一个2个多行,并让子行自动接收父自动生成的id 我怀疑这种
id
-1000。然后在第一个父/子对-1001、第二个-1002中设置id
,以此类推。使用它,您可以在单个insert
中插入父列表和子列表
我可以相信Room会以与我传递给INSERT语句的父行相同的顺序返回自动生成的父ID吗
你可以。只需查看文件室的方法insertAndReturnIdsList
,该方法在插入实体列表时调用:
// THIS METHOD IS CALLED WITHIN TRANSACTION WHEN YOU CALL YOUR INSERT-DAO-METHOD
public final List<Long> insertAndReturnIdsList(Collection<? extends T> entities) {
final SupportSQLiteStatement stmt = acquire();
try {
final List<Long> result = new ArrayList<>(entities.size());
int index = 0;
for (T entity : entities) { <-- LOOPING LIST OF INSERTED ENTITIES
bind(stmt, entity);
result.add(index, stmt.executeInsert()); <-- INSERT ONE-BY-ONE IN ONE TRANSACTION
index++; <-- INDEX OF RESULT LIST MATCHES INDEX OF ENTITIES LIST
}
return result;
} finally {
release(stmt);
}
}
//当您调用INSERT-DAO-METHOD时,会在事务中调用此方法
公共最终列表insertAndReturnIdsList(集合