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

时间:2018-02-19 12:08:54

标签: postgresql save spring-data-jpa

我创建了一个spring应用程序。我正在尝试使用JPA Repository的save方法将数据保存到数据库中。我收到错误null value in column "id" violates not-null constraint

的HomeController

@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";

     }
}

用户

@Entity
@Table(name="user", schema="new")
public class user implements Serializable 
{

private static final long serialVersionUID = -2956665320311624925L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer id;

@Column(name="uname")
public String uname;

@Column(name="pass")
public String pass;

表脚本

enter image description here

enter image description here

通过Postman我正在尝试插入以下数据

enter image description here

我收到此错误

org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint

任何人都可以告诉我上面代码中我做错了什么

2 个答案:

答案 0 :(得分:1)

我在这里看到了几个问题。

首先,将@ModelAttribute替换为@RequestBody,因为您发送了JSON请求,使用后者是明智之举。 (阅读Clip path supporthere)。在您的情况下,来自请求的值不会传递到包含save值的存储库Id方法。这就是你没有得到空约束错误的原因。

其次,由于您使用的是GenerationType.IDENTITY策略,因此您应该使用serialbigserial类型让Postgres生成您的主键。

IDENTITY策略here

上阅读精美的书面答案

答案 1 :(得分:0)

您在模型类中将id定义为Integer字段。尝试将json中的值作为Integer传递,而不是String

{
    "id": 1,
    "uname": "abc",
    "upass": "abc"
}