我有一张约有10,000条记录的表.
例如,我有以下实体:
@Entity(tableName="cupcakes")
public class CupcakeEntity {
@PrimaryKey(autoGenerate = true)
@ColumnName(name = "id")
long id;
@ColumnName(name = "name")
String name;
@ColumnName(name = "parent_id")
Long parentId;
}
然后,我将此类与CupcakeEntity自加入:
public class CupcakeModel {
@Embedded
CupcakeEntity cupcake;
@Relation(parentColumn = "id", entityColumn = "parent_id")
List parent;
}
当我使用SQL语句获取CupcakeModel时:
选择*从纸杯蛋糕中,名称类似’%’|| :关键字|| ‘%’
该查询将引发以下异常:
too many SQL variables (code 1): , while compiling:
SELECT id,name,parent_id FROM `cupcakes` WHERE parent_id IN
(?,?,?,?...............................
我查看了Room的生成代码,发现它正在为所有实体循环.
除了创建自己的JOIN语句之外,还有其他解决方法吗?
解决方法:
如果有人碰到这个问题,我将在这里留下这个答案.
正如@CommonsWare所建议的那样,我在查询中添加了一个LIMIT,现在看起来像:
选择*从纸杯蛋糕中,名称类似’%’|| :关键字|| ‘%’LIMIT 500
这种解决方法应归功于@CommonsWare.
标签:android-room,sqlite,android
来源: https://codeday.me/bug/20191025/1926990.html