首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android机房关系

Android机房关系
EN

Stack Overflow用户
提问于 2018-04-11 08:20:51
回答 2查看 546关注 0票数 0

我有两个实体看起来像这样(简化为阅读目的)。

代码语言:javascript
复制
@Entity
public class Machine {
    @PrimaryKey
    private long id
}

@Entity
public class MachineType {
    @PrimaryKey
    private long id
}

我想要的是机器实体有一个机器类型。我尝试了外键,但我的问题是它根本不像包含了外部实体的Spring等效持久性库(我不知道如何解释得足够好)。以下是春季REST的一个示例:

代码语言:javascript
复制
{
    "id": 1,
    "name": "foo",
    "machineType": {
        "id": 1,
        "name": "bar"
    }
}

而带外键的房间是这样的:

代码语言:javascript
复制
{
    "id": 1,
    "name": "foo",
    "machineType_id": 1
}

当我将对象放回API时,这会给我带来各种各样的麻烦。所以我尝试使用@Relation注释,因为这听起来像我所需要的,但是这只会产生一个错误,因为来自相关对象的列包含在主实体中,所以我得到了两个"id“列。

错误:多个字段具有相同的columnName: id。字段名: id,machineType > id。

请帮帮忙。我是不是走错路了?我的问题有更好的解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-11 11:36:21

当您插入数据更改表列名时,如下面所示,您可以在房间数据库中指定列名。

代码语言:javascript
复制
@Entity
public class Machine {
    @PrimaryKey
    @ColumnInfo(name = "nId")
    private long id;
    @ColumnInfo(name = "machineType_id")
    private long mId;

}

@Entity
public class MachineType {
    @PrimaryKey
    @ColumnInfo(name = "machineType_id")
    private long id;
}

当您获得相同类的api响应时,该时间是服务器的唯一键,该时间使用以下关键字在服务器键中指定特定字段。

代码语言:javascript
复制
@SerializedName("name")
@ColumnInfo(name="sName")
private String name;
票数 1
EN

Stack Overflow用户

发布于 2018-04-11 08:31:48

在这种情况下,嵌入的注释是有用的。嵌入式链接

因此,您需要做的是在Machine类中有一个MachineType对象,并使用@Embedded对其进行注释。另外,为了避免有两个同名的变量,在这种情况下是id,您可以使用这个注释@ColumnInfo(name = "some_column_name")来拥有一个与变量名不同的列名。

列信息链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49770020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档