我有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,并通过该关系更新各个实体。 如果是这样的话,这是我出问题的地方吗?如何使用该关系实现插入到其他实体中?
非常感谢您的帮助!
答案 0 :(得分:1)
我的理解是我可以建立一个Relation和一个对应的 并通过该关系更新各个实体。可能 如果是这种情况,这就是我做错的地方 使用该关系插入其他实体吗?
不,您的RelationA类仅具有一个有用的功能-它可用于从查询中获取这种类型的结果。您不能使用它来插入/更新/删除值,就像在@Entity注释的类中一样。与ROOM中您的类中的两个Relations等效-是在SQL查询中添加到表A中的两个左连接(B,C表)的集合。
SQLite中没有与其连接的对应表。因此,所有更改都必须借助其Dao对A,B,C类进行。