Android房间一对一关系(获取外域)
Android Room one-to-one relation (getting foreign fields)
我想在我的项目中实施 android ROOM。
但我无法解决 Order(customer_id) 和 Customer(id).
之间的一对一关系
是否可以在OrderDao接口中填写customer(@Ignore protected 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);
//....
}
截至目前,无法自动填充 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();
}
我想在我的项目中实施 android ROOM。 但我无法解决 Order(customer_id) 和 Customer(id).
之间的一对一关系是否可以在OrderDao接口中填写customer(@Ignore protected 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);
//....
}
截至目前,无法自动填充 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();
}