单独表中的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();
    }