gpt4 book ai didi

安卓房间 : How to read from two tables at the same time - duplicate id column

转载 作者:可可西里 更新时间:2023-11-01 19:05:54 25 4
gpt4 key购买 nike

我是 Android Room 的新手。我想从一个表中读取,也想从一个相关的表中读取。这种关系很常见。一张表定义实例。另一个表定义类型。想象一个 Animal 表和一个 AnimalType 表。几乎每次需要读取 Animal 表时,也需要读取 AnimalType 表。例如,我们要显示动物名称(来自 Animal 表)和猴子图标(来自 AnimalType 表)。

根据 Android Room 文档中的示例,这是对其建模的数据类:

public class AnimalWithType {
@Embedded
private Animal animal;

@Embedded
private AnimalType type;
...

DAO 可以通过单个查询来查询数据。 Room 应该足够智能以填充两个子类。

@Dao
public interface ZooDao
@Query("select * from animal join animal_type on (animal.id = animal_type.id)")
List<AnimalWithType> getAllAnimals();

一如既往,理论很漂亮。现实被打破了。结果出现如下错误:

Error:(8, 8) error: Multiple fields have the same columnName: id. Field names: animal > id, animalType > id.

显然,Room 对在查询中只获取一个“id”列以及它属于哪个类感到困惑。有两种可能的解决方案:1) 我们可以为 building_type.id 创建一个列名别名并将它告诉 Room。2) 我们已经知道从 Animal 表到 AnimalType 表(可能是 animal_type_id)的外键有另一个 id 列。

问题是我们如何将其传达给 Room。 Room 甚至能够处理这种情况吗?

感谢有关如何解决此问题的提示。我希望 Room 不需要做一些尴尬的事情,比如给每个 id 列一个唯一的名称。

最佳答案

waqaslam 指出了解决问题的方法。他建议为列名起别名。额外的步骤是给第二个表一个前缀。

public class AnimalWithType {
@Embedded
private Animal animal;

@Embedded(prefix = "type_")
private AnimalType type;
...

列别名又长又乱。我希望有人能找到更清洁的方法。

@Query("select animal.id, animal.name..., animal_type.id as type_id... from animal join animal_type on (animal.id = animal_type.id)")

关于安卓房间 : How to read from two tables at the same time - duplicate id column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48123507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com