【问题标题】:Android Room one-to-one relation (getting foreign fields) [duplicate]Android Room 一对一关系(获取外域)[重复]
【发布时间】:2018-09-01 22:34:12
【问题描述】:

我想在我的项目中实现 android ROOM。 但是我无法解决 Order(customer_id) 和 Customer(id) 之间的一对一关系。

是否可以在 OrderDao 界面填写客户(@Ignore protected Customer customer)字段?

我只能解决java代码。还有其他方法吗?

//    Customer.java 
@Entity (tableName = "t_customer")
public class Customer {
  @PrimaryKey(autoGenerate = true)
  @ColumnInfo(name = "id")
  protected String mId;

  @ColumnInfo(name = "name")
  protected String mName;

}

// Order.java
@Entity(tableName = "t_order",
    foreignKeys = {
    @ForeignKey(entity = Customer.class,
        parentColumns = "id",
        childColumns = "customer_id",
        onDelete = SET_NULL) }
public class Order {
  @PrimaryKey(autoGenerate = true)
  @ColumnInfo(name = "id")
  protected String mId;

  @ColumnInfo(name = "description")
  protected String mDescription;

  @ColumnInfo(name = "customer_id")
  protected String mCustomerId;

  @Ignore
  **protected Customer customer;**

//....  
}

//OrderDao.java

@Dao
public interface OrderDao {

  @Query("SELECT * from t_order ORDER BY id DESC")
  LiveData<List<Order>> listByIds();

  @Query("SELECT * from t_order WHERE id = :id LIMIT 1")
  LiveData<Order> readById(long id);

//....
}

【问题讨论】:

    标签: android android-room android-database


    【解决方案1】:

    目前还没有办法自动填写Customer。您需要创建另一个名为 OrderWithCustomer 的 POJO,它可能如下所示:

    public class OrderWithCustomer {
    
        @Embedded
        private Order order;
    
        @ColumnInfo(name = "name")
        private String customerName;
    }
    

    在你的DAO:

    @Dao
    interface OrderDao {
    
        @Query("SELECT t_order.* name FROM t_order LEFT JOIN t_customer ON t_order.customer_id = t_customer.id")
        public List<OrderWithCustomer> getOrderWithCustomer();
    
    }
    

    【讨论】:

    • 感谢您的回复。我期待像greendao中的@ToOne注释这样的1-1关系。我希望谷歌添加这个注释。
    • 我也希望如此。房间里的关系真的很棘手。
    • 你能用这个方法从两个表中选择所有列(只要有唯一的名称)吗?
    • @TheRealChx101 是的,你可以
    • 谢谢。我在使用 Room 时遇到了困难,所以我最终放弃了它,转而使用了 ObjectBox。在我看来,它一定比房间好。它确实支持 Rx 和 Android 的分页库。太棒了
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多