android - 使用带关系的房间返回错误
问题描述
我有3个实体,A,B,C。
实体 A 与 B 和 C 相关。
为了模拟这种关系,我这样做了:
public class RelationA {
@Embedded public A a;
@Relation(parentColumn = "ID", entityColumn = "bID", entity=B.class)
public B b;
@Relation(parentColumn = "ID", entityColumn = "cID", entity=C.class)
public C c;
}
我有一个Dao
这样的关系:
@Dao
public abstract class RelationADao extends BaseDao<RelationA> {
// Add more methods for more custom operations
}
与通常BaseDao
的泛型类型的插入、更新、删除操作一样T
。
这是我的RoomDatabase
:
@Database(entities = {A.class, B.class, C.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public abstract RelationADao relationADao();
// initialization code here...
}
我收到以下错误,我不明白为什么。
error: Type of the parameter must be a class annotated with @Entity or a collection/array
of it.
public abstract void insert( T entity);`
^
如果您对实现感到好奇,BaseDao
我将包括它:
@Dao
public abstract class BaseDao<T> {
@Update
public abstract void update( T entity);
@Delete
public abstract void delete( T entity);
@Insert
public abstract void insert( T entity);
}
我的理解是我可以建立一个Relation和一个对应的Dao,并通过关系更新各个实体。如果是这种情况,这可能是我出错的地方,我将如何使用该关系实现插入其他实体?
任何帮助将不胜感激,谢谢!
解决方案
我的理解是我可以建立一个Relation和一个对应的Dao,并通过关系更新各个实体。如果是这种情况,这可能是我出错的地方,我将如何使用该关系实现插入其他实体?
不,您的 RelationA 类只有一个有用的功能 - 它可用于从查询中获取此类型的结果。您不能使用它来插入/更新/删除值,就像在使用 @Entity 注释的类中一样。等效于您在 ROOM 中的类中的两个关系 - 在 SQL 查询中添加到表 A 中的两个左连接(B,C 表)的集合。
SQLite 中没有与之连接的对应表。因此,在他们的道的帮助下,您必须对您的 A、B、C 类进行所有更改。
推荐阅读
- python - 转换为字符串后如何在打印命令中使用 \n 转义字符?
- r - 如何在数据框列表中将 data.frame 中的列命名为数据框的名称
- openmdao - pyOptSparse 错误:在测试 OpenMDAO 期间导入已编译的 snopt 模块时出错
- android-studio - 在 Android Studio 中构建 gradle 之前运行 shell 脚本?
- sql - 在 SQL 中,如何在动态结果中将行切换到列?
- php - 每当我尝试提交我创建的注册表单时,都会弹出 Laravel 错误“404 not found”
- node.js - 多重集成的最佳设计模式
- mysql - 从之前的 SELECT 中设置 MYSQL WHERE 条件
- python - 如何解码 NLP 问题的混淆文本?
- swagger-ui - TomEE 8.0.4 和 OpenApi 扩展(Swagger-UI 1.0.3)的奇怪问题