Postgresql Spring数据JPA:如何使用jpaRepository的save()将数据保存到数据库中

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 )

我创建了一个spring应用程序。我正在尝试使用JPA存储库的save方法将数据保存到数据库中。我在列“id”中得到的错误
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"
}