微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在具有多对多关系的Android Room中插入交汇点?

如何解决如何在具有多对多关系的Android Room中插入交汇点?

我正在尝试在“餐”中获取“菜”的列表。 我创建了一个实体“ dish”,一个实体“ Meal”和一个实体“ dishMealJunction”,其中包含菜肴和餐食的ID。 我还制作了一个POJO来定义两者之间的关系。

但是,当我尝试插入一顿我认为带有菜式的餐点时:

  Meal dinner1 = new Meal(Constants.DINNER,5,today);
            List<dish> dishList = new ArrayList<dish>();
            dishList.add(fish);
            dishList.add(rice);
            dishList.add(cookies);

            mviewmodel.insertMeal(dinner1,dishList);

或这种方式:

 MealdishJunction mdj = new MealdishJunction(cookies.getdishId(),dinner1.getMealId());
 MealdishJunction mdj2 = new MealdishJunction(rice.getdishId(),dinner1.getMealId());

 mviewmodel.insertMealdish(mdj);
 mviewmodel.insertMealdish(mdj2);

它不会保存每餐的菜肴清单:

  ld_mealdish = mviewmodel.getLd_latestMeal();
    adapter = new RecAdapter(this);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new linearlayoutmanager(this));

    ld_mealdish.observe(this,new Observer<Mealdish>() {
        @Override
        public void onChanged(Mealdish mealdish) {
            if (mealdish != null) {
                tv_meal_name.setText(mealdish.meal.getDate().toString()); //**returns meal**
                List<dish> dishList = mealdish.dishes; //**returns empty list**
                adapter.setmNamables(dishList);
            }
        }
    });

我怎么了?

进餐班:

@Entity(tableName = "meal_table")
public class Meal {

@PrimaryKey(autoGenerate = true)
private long mealId;

@ColumnInfo(name = "din_lun")
private int din_lun;

@ColumnInfo(name = "amount")
private int amount;

@ColumnInfo(name="date")
private Date date;

public Meal(int din_lun,int amount,Date date) {
    this.din_lun = din_lun;
    this.amount = amount;
    this.date = date;
}
....//getters and setters

}

dish.class:

@Entity(tableName = "dish_table")
public class dish {

@PrimaryKey(autoGenerate = true)
private long dishId;

@ColumnInfo(name = "name")
private String name;

@ColumnInfo(name = "type")
private String type;

@ColumnInfo(name = "exclusive")
private int exclusive;

@ColumnInfo(name= "dmp")
private int dmp;

public dish(String name,String type,int exclusive,int dmp) {
    this.name = name;
    this.type = type;
    this.exclusive = exclusive;
    this.dmp = dmp;
}
... //getters and setters

MealdishJunction.class:

@Entity(primaryKeys = {"dishId","mealId"})
public class MealdishJunction {
    public long dishId;
    public long mealId;
    
    public MealdishJunction(long dishId,long mealId) {
        this.dishId = dishId;
        this.mealId = mealId;
    }
    // .... getters and setters

Mealdish.class:

public class Mealdish {
    @Embedded public Meal meal;
    @Relation(
            parentColumn = "mealId",entityColumn = "dishId",associateBy = @Junction(MealdishJunction.class)
    )
    public List<dish> dishes;
}

道斯:

    @Dao
public interface dishDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertdish(dish dish);

    @Transaction
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(Meal meal,List<dish> dishes);

    @Insert(entity= MealdishJunction.class,onConflict = OnConflictStrategy.REPLACE)
    void insert(MealdishJunction mealdishJunction);

    @Transaction
    @Query("SELECT * FROM meal_table ORDER BY mealId DESC LIMIT 1")
    LiveData<Mealdish> getLatestMeal();


}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。