Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java REST放置ID为的资源,同时具有自动生成的ID_Java_Spring Boot_Hibernate - Fatal编程技术网

Java REST放置ID为的资源,同时具有自动生成的ID

Java REST放置ID为的资源,同时具有自动生成的ID,java,spring-boot,hibernate,Java,Spring Boot,Hibernate,我正在实现一个RESTAPI,我想使用PUT方法来创建或更新资源。该资源由一个ID标识,该ID可由用户发送,如下所示: { "id": 5, "name": "John" } Spring引导Rest控制器接受消息并使用Spring数据存储库,该存储库具有自动生成的ID。如果数据库中存在具有此ID的记录,则将对其进行更新,否则将创建具有此ID的新记录。但是,ID是通过Hibernate序列创建的。如果用户添加了ID为5

我正在实现一个RESTAPI,我想使用PUT方法来创建或更新资源。该资源由一个ID标识,该ID可由用户发送,如下所示:

{
    "id": 5,
    "name": "John"
}

Spring引导Rest控制器接受消息并使用Spring数据存储库,该存储库具有自动生成的ID。如果数据库中存在具有此ID的记录,则将对其进行更新,否则将创建具有此ID的新记录。但是,ID是通过Hibernate序列创建的。如果用户添加了ID为5的资源,但Hibernate序列在第2位,我应该移动Hibernate序列吗?或者有更好的方法来处理这个问题吗?

在Hibernate中,如果您想添加具有自动生成ID的新实体,您不应该向它们传递ID列,或者如果您已经有ID为的实体,在Hibernate中,您应该将ID字段设置为null

,如果您想添加具有自动生成ID的新实体,您不应该将其传递给ID列,或者如果您已经有具有ID的实体,您应该将ID字段设置为null

,我相信没有,您应该分离POST/PUT API来创建/更新,就像

POST: /users
PUT:  /users/{user_id}

     body: {
     "name": "John",
     ...
     }

我相信不是,你应该分开POST/PUT API来创建/更新

POST: /users
PUT:  /users/{user_id}

     body: {
     "name": "John",
     ...
     }

我建议您创建一个查询方法GET:

GET: /users/{userId}
这有助于你获取身份证


注意。

我建议您创建一个查询方法GET:

GET: /users/{userId}
这有助于你获取身份证


关于。

当用户发送ID不存在的PUT消息时,应该发生什么?根据PUT规范,在这种情况下,应该创建一个新记录。如果您真的只想使用PUT,您可以做的是检查ID是否存在,如果不存在,请将ID设置为null,以便hibernate为您创建一个新ID。如果存在,请正常保存。但在某种程度上,我不知道为什么你会有一个还不存在的ID,这让我有点害怕。这告诉我你可能会有身份冲突。。。因此,您可以更新一个不需要更新的实体。您是对的,让用户决定ID是一个愚蠢的想法。我不知道我从哪个教程中得到的。当用户发送ID不存在的PUT消息时,会发生什么?根据PUT规范,在这种情况下,应该创建一个新记录。如果您真的只想使用PUT,您可以做的是检查ID是否存在,如果不存在,请将ID设置为null,以便hibernate为您创建一个新ID。如果存在,请正常保存。但在某种程度上,我不知道为什么你会有一个还不存在的ID,这让我有点害怕。这告诉我你可能会有身份冲突。。。所以你可以更新一个不需要更新的实体。你是对的,让用户决定ID是一个愚蠢的想法。我不知道我从哪个教程中得到的。如果找不到用户ID要更新的记录,PUT应该怎么做?在这种情况下,说用户不存在。一旦调用PUT:/users/123/{body}。这意味着您正试图为用户
123
更新某些内容,但用户不存在,然后返回user not valid/existingHow should behave,当它找不到用户id要更新的记录时?在这种情况下,所述用户不存在。一旦调用PUT:/users/123/{body}。这意味着您正试图为user
123
更新某些内容,但user不存在,然后返回user not valid/existing