单独表中的Android房间关系
我有两个对象:单独表中的Android房间关系,android,foreign-keys,retrofit,android-room,Android,Foreign Keys,Retrofit,Android Room,我有两个对象:User和UserType。两者都作为列表从REST服务加载,并存储在单独的表中 REST服务发送的User对象包含一个typeId,它是UserType的id。当我从数据库加载用户时,应该加载UserType对象。我该怎么做 注: 在我的用户类中使用@嵌入式用户类型将在用户数据库中存储该用户类型。我宁愿要分开的桌子 使用@关系旨在返回用户类型列表,因此这不适合模型 使用此处描述的@TypeConverter是不可能的:当我保存一个用户时,它的UserType对象将减少为一个id。
User
和UserType
。两者都作为列表从REST服务加载,并存储在单独的表中
REST服务发送的User
对象包含一个typeId,它是UserType
的id。当我从数据库加载用户时,应该加载UserType
对象。我该怎么做
注:
在我的用户类中使用@嵌入式
用户类型将在用户数据库中存储该用户类型。我宁愿要分开的桌子
使用@关系
旨在返回用户类型列表,因此这不适合模型
使用此处描述的@TypeConverter
是不可能的:当我保存一个用户时,它的UserType对象将减少为一个id。当我加载这个用户时,id将被UserType替换。这里的问题是REST服务只发送一个typeId,这意味着对于接收列表中的每个用户,在保存它之前,我需要获取用户类型并在用户上设置它,以便允许TypeConverter将此用户类型转换回其id
用户:
@Entity(tableName=“users”,
ForeignKey=@ForeignKey(
实体=UserType.class,
parentColumns=“id”,
childColumns=“typeId”,
onDelete=ForeignKey.SET\u NULL,
onUpdate=ForeignKey.CASCADE),
索引=@Index(“typeId”))
公共类用户{
@主键
@序列化名称(“Id”)
受保护的长id=-1;
@序列化名称(“密码”)
私有字符串密码;
@SerializedName(“名字”)
私有字符串名;
@SerializedName(“姓氏”)
私有字符串lastName;
@SerializedName(“GsmNumber”)
私有字符串gsmNumber;
@序列化名称(“生日”)
私人约会生日;
@SerializedName(“类型ID”)
私有长typeId;
// ???
私有用户类型;
公共用户(){
}
//接球手和接球手
}
@刀
公共接口UserDao{
@插入(onConflict=OnConflictStrategy.REPLACE)
作废保存(用户u);
@插入(onConflict=OnConflictStrategy.REPLACE)
作废保存(列出我们);
@删除
作废删除(用户u);
@删除()
作废删除(列出我们);
@查询(“从id=:id的用户中选择*)
用户负载(长id);
@查询(“从用户中选择*)
LiveData getAll();
}
用户类型:
@Entity(tableName = "usertypes")
public class UserType {
private int color;
public UserType() {
}
// getters setters
}
@Dao
public interface UserTypeDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void save(UserType t);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void save(List<UserType> ts);
@Delete
void delete(UserType t);
@Delete()
void delete(List<UserType> ts);
@Query("SELECT * FROM usertypes WHERE id = :id")
UserType load(long id);
@Query("SELECT * FROM usertypes")
LiveData<List<UserType>> getAll();
}
@实体(tableName=“usertypes”)
公共类用户类型{
私人内特色;
公共用户类型(){
}
//吸气剂二传手
}
@刀
公共接口UserTypeDao{
@插入(onConflict=OnConflictStrategy.REPLACE)
作废保存(用户类型t);
@插入(onConflict=OnConflictStrategy.REPLACE)
作废保存(列表ts);
@删除
作废删除(用户类型t);
@删除()
作废删除(列表ts);
@查询(“从usertypes中选择*,其中id=:id”)
用户类型加载(长id);
@查询(“从用户类型中选择*)
LiveData getAll();
}
@Entity(tableName = "usertypes")
public class UserType {
private int color;
public UserType() {
}
// getters setters
}
@Dao
public interface UserTypeDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void save(UserType t);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void save(List<UserType> ts);
@Delete
void delete(UserType t);
@Delete()
void delete(List<UserType> ts);
@Query("SELECT * FROM usertypes WHERE id = :id")
UserType load(long id);
@Query("SELECT * FROM usertypes")
LiveData<List<UserType>> getAll();
}