来自其他包的 Api 出现错误“必须在调用 save() 之前手动分配此类的 ID”

Posted

技术标签:

【中文标题】来自其他包的 Api 出现错误“必须在调用 save() 之前手动分配此类的 ID”【英文标题】:Api From Other Package Is Giving Error "ids for this class must be manually assigned before calling save()" 【发布时间】:2021-06-30 20:16:54 【问题描述】:

我正在为我最后一年的项目构建一个 Spring Boot 后端。 产品包中的 API 工作正常。但是当我调用位于 Users Package 内的 addUser Api 时,我得到了这个 " 必须在调用 save() 之前手动分配此类的 ID" 错误。我得到错误代码 500 作为响应。

我已经尝试在应用程序根和许多其他解决方案中实现 componentscan 注释。但没有什么对我有用。

Github Repo Link

到目前为止我尝试过的解决方案

Solution 1 Solution 2

【问题讨论】:

API 调用有问题。 【参考方案1】:

Answered here before

您尚未共享 API 请求,我猜您没有为 User 类传递正确的参数。该类也没有 ID 生成策略,加上不正确的请求正文会给您上述错误。

编辑:您的 UserRepository extends CrudRepository<User, Integer> 定义了一个具有整数主键的存储库,但是该实体有一个字符串 id 字段,您可能还想更正它。

【讨论】:

我在响应正文中传递了 user_id : "myuserid"。 @Creator 字段为user_Id,大写为I 我已完成您建议的所有更改。但还是不行 尝试调用 API 为:user_Id : "myuserid" 我像你建议的那样调用 api。但仍然是同样的错误。【参考方案2】:

问题来了

@Entity 
public class User 
    @Id
    String user_Id;

  

您已将 user_Id 声明为表的主键。因此它不能为空。我确信在您的控制器中您传递对象 User 而不提供密钥。在许多情况下,我们离开数据库来创建主键,但在您的情况下,它不会那样工作。所以你必须在调用.save()之前为你的用户提供一个user_Id

这就是你得到错误的原因

 " ids for this class must be manually assigned before calling save()"

如果您希望从 JPA 或您的数据库自动获取密钥的值,您必须提供另一个注解 @GeneratedValue 并选择一个选项。 但要使其正常工作,您必须将 id 字段从 String 更改为 Long 或 Integer。

这是一个如何工作的示例

@Entity 
public class User 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

  

世代类型。还有很多其他选择。

【讨论】:

我将数据传递为 "user_Id": "MyID" 而我必须像这样 "MyID" 发送它

以上是关于来自其他包的 Api 出现错误“必须在调用 save() 之前手动分配此类的 ID”的主要内容,如果未能解决你的问题,请参考以下文章

来自 api 请求的对象在 ForEach 中打印,但不在 List 中

Symfony services.yaml来自供应商捆绑包的绑定参数

哪里可以获得单个lodash包的@types?

来自 Oculus 集成包的 Unity Spatializer,用于在未触及 Unity 时抛出错误

如何修复来自 Axios 的随机 http 请求(404 响应)

如何为不是来自 tyk 的呼叫保护远程 api?