android room中的实体继承

Osa*_*rez 7 android android-room

我有一个父类Queue,它具有以下字段:

  1. 姓名
  2. 类型
  3. 地位

根据类型,我将 Queue 分解为更多子类,每个子类都有自己的额外字段。例如:

ProductionQueue extends Queue { startDate, endDate }
ShippingQueue extends Queue { shippingDate, shippingAgent }
...
Run Code Online (Sandbox Code Playgroud)

我在 android studio 中创建了 Queue 作为基类并从中扩展我的子类,但代码无法编译并抱怨缺少字段(子类字段)。下面是一个例子:

ProductionQueue extends Queue { startDate, endDate }
ShippingQueue extends Queue { shippingDate, shippingAgent }
...
Run Code Online (Sandbox Code Playgroud)

在编译时我收到:错误:查询返回的列在 com.example.room.ProductionQueue 中没有字段 [startDate, endDate] 即使它们被注释为非空或原始。查询返回的列:[id,name,type,status]。

[id,name,type,status]来自父类,而[startDate, endDate]子类字段。

在我的应用程序中的各种情况下,我只会列出队列名称、类型和状态,并且我更愿意将队列数据保存在单个表中以便快速查询。

我可以为各个子类创建子表并使用关系,但如果 R​​oom 允许继承,所有这些都可以轻松避免。如果是的话,房间是否支持这种继承,我怎样才能使它工作?

谢谢。

Jul*_*ñas 4

问题是您正在尝试从表中检索生产队列queue,该表不包含有关生产队列所需的日期的信息。

要解决这个问题,请为生产队列表定义一个名称:

@Entity(tableName = "production_queue")
public class ProductionQueue extends Queue {
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,更改查询以从正确的表中检索行:

// Retrieving rows from "production_queue", not from "queue"
@Query("SELECT * FROM production_queue WHERE id = :queueID")
LiveData<List<ProductionQueue>> findByID(Long queueID);
Run Code Online (Sandbox Code Playgroud)

这样,返回的行将包含字段startDateendDate