来自其他包的 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来自供应商捆绑包的绑定参数
来自 Oculus 集成包的 Unity Spatializer,用于在未触及 Unity 时抛出错误