@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private String externalID; //<--- why we need this?
}
有人建议我在类中包含一个外部 Id 字段,类似这样?有什么建议吗?
最佳答案
不确定这里的 externalID
到底是什么意思,因为使用情况并不清楚。
但是,我假设了几种情况:
1。外部服务
外部 ID 可用于将您的实体与来自不同服务的另一个资源的某个 ID 进行映射。在另一个系统中标识该实体的东西。
例如:在externalID
中可以存储个人twitter ID或银行帐户ID。
2。安全方面
externalID
用于保护(封装)内部id
对外可见,这可能会导致一些安全漏洞。
例如:
在您的情况下,内部 id
是带有 GenerationType.AUTO
的整数,这意味着所有实体都将具有增量 id:1, 2, 3, ...
知道有人可能会分析您的 API 调用并通过 API 轻松迭代您的所有帐户,例如:GET api/person/{id}
。
通常,使用不同类型的 ID 来解决此问题,例如 UUID,例如:8b9af550-a4c7-4181-b6ba-1a1899109783
。在您的情况下,可以将其用作 externalID
。
因此,我认为这就是向您的实体添加额外 externalID
的原因。
注意:如果您的数据库支持使用 UUID(或将其存储为字符串),您只需将内部 id 类型替换为 UUID
并删除 externalID
在这里。
关于java - 外部ID概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61122861/