java - 外部ID概念?

标签 java hibernate

@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/

相关文章:

java - 为什么需要在下面的代码中将 Context 设置为最终的?

java - 实体未映射

java - 坚持使用 hibernate/JPA

hibernate - 如何在spring boot data jpa中链接@Entity之间的外键

java - 在 Spring Boot 中从 Native SQL 转换为 JPA 以返回 List

java - 即时更改数据库列类型

java.security.cert.CertificateException : No subject alternative names present;

java - 在java中使用继承时出现错误消息

Java:大文件中的正则表达式替换

java - Java 中是否有 Nashorn 的 ScriptObjectMirror 的公共(public)和具体实例?