Room框架复合主键下@Relation关联查询的实现方法
处理Room复合主键的@Relation关联问题
嘿,这个场景我太熟悉了!当父表用了复合主键时,Room的@Relation注解完全支持多列匹配,只需要把parentColumn和entityColumn都改成字符串数组的形式就可以搞定。
直接给你修改后的代码示例:
public class FoodWithIngredients extends Food { @Relation( parentColumn = {"id", "language_id"}, entityColumn = {"food_id", "food_language_id"}, entity = Ingredient.class ) private List<Ingredient> mIngredients; // 构造方法、getter/setter 按需补充 }
几个关键注意点:
- 确保你的
Food实体类正确声明了复合主键:@Entity(primaryKeys = {"id", "language_id"}) public class Food { private long id; private long language_id; // 其他字段... } - 同时
Ingredient实体的外键字段要和你指定的entityColumn完全对应,建议通过@ForeignKey注解明确关联(保证数据完整性):@Entity( foreignKeys = { @ForeignKey( entity = Food.class, parentColumns = {"id", "language_id"}, childColumns = {"food_id", "food_language_id"}, onDelete = ForeignKey.CASCADE ) } ) public class Ingredient { @PrimaryKey(autoGenerate = true) private long ingredientId; private long food_id; private long food_language_id; // 其他字段... } - 查询时,Room会自动根据两组列的完全匹配关系,把对应的配料关联到对应的食物上,不需要你手动写复杂的SQL关联语句。
内容的提问来源于stack exchange,提问作者MrVasilev
相关产品推荐
相关产品推荐

