【发布时间】:2018-04-19 10:43:37
【问题描述】:
我有一个包含大约 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<CupcakeEntity> parent;
}
当我使用 SQL 语句获取 CupcakeModel 时:
SELECT * FROM cupcakes WHERE name LIKE '%' || :keyword || '%'
查询会抛出以下异常:
too many SQL variables (code 1): , while compiling:
SELECT id,name,parent_id FROM `cupcakes` WHERE parent_id IN
(?,?,?,?...............................
我查看了 Room 生成的代码,发现它正在循环所有实体。
除了创建我自己的 JOIN 语句之外,还有其他解决方法吗?
【问题讨论】:
-
您可以尝试使用
LIMIT或其他东西来限制您获得多少CupcakeModel实例。我对您的错误的解释是您的查询返回了很多纸杯蛋糕,而 Room 试图在一个查询中获取所有父母。理想情况下,Room 会更好地处理这个问题(分批加载父母)——如果您可以轻松创建可重现的测试用例,您可能会考虑提交功能请求。 -
我会尝试使用
LIMIT -
LIMIT成功了!谢谢@CommonsWare
标签: android sqlite android-room