Postgresql Spring数据JPA:如何使用jpaRepository的save()将数据保存到数据库中
我创建了一个spring应用程序。我正在尝试使用JPA存储库的save方法将数据保存到数据库中。我在列“id”中得到的错误Postgresql Spring数据JPA:如何使用jpaRepository的save()将数据保存到数据库中,postgresql,save,spring-data-jpa,Postgresql,Save,Spring Data Jpa,我创建了一个spring应用程序。我正在尝试使用JPA存储库的save方法将数据保存到数据库中。我在列“id”中得到的错误null值违反了非null约束 家庭控制器 @RestController public class HomeController { @Autowired public userRepository repository; @RequestMapping(value="/save2",method=RequestMethod.POST )
null值违反了非null约束
家庭控制器
@RestController
public class HomeController
{
@Autowired
public userRepository repository;
@RequestMapping(value="/save2",method=RequestMethod.POST )
public String save1(@ModelAttribute user us)
{
repository.save(us);
return "sucessfull";
}
}
使用者
表脚本
通过邮递员,我试图插入以下数据
我得到了这个错误
org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint
有人能告诉我在上面的代码中我做错了什么吗?您在模型类中将
id
定义为Integer
字段。尝试将json中的值传递为整数
,而不是字符串
{
"id": 1,
"uname": "abc",
"upass": "abc"
}
我在这里看到了几个问题 首先,将
@modeldattribute
替换为@RequestBody
,因为您发送的是JSON请求,所以明智的做法是使用后者。(通读并阅读)。在您的情况下,请求中的值不会传递到存储库save
方法,包括Id
value。这就是您得到非空约束错误的原因
其次,由于您使用的是GenerationType.IDENTITY
策略,因此应该使用serial
或bigserial
类型让Postgres生成您的主键
阅读关于
IDENTITY
strategy的漂亮书面回答,当你有GenerationType.IDENTITY时,为什么要创建id我不明白。不需要在model中创建id字段,也不需要在json中传递id字段。同样的错误发生
{
"id": 1,
"uname": "abc",
"upass": "abc"
}