创建具有自动增量的JSON对象以供POST请求保存到数据库

时间:2018-06-26 04:49:38

标签: java json web-services spring-boot

我使用springboot创建Web服务并连接到我的角度项目 因此,我在CrudRepository中使用save()进行插入和更新,但是当我在POSTMAN中使用JSON发送带有JSON的POST请求以插入新对象时,出现错误:

"status": 500,
"error": "Internal Server Error",
"message": "could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet",
"path": "/update" 

更新数据库中的现有ID很好,但是对于新ID则失败。

JSON示例

  

{      “ id”:5,<------ auto_increment
     “ name”:“ John”,      “ description”:“英俊”   }

@RestController{
@Autowired
    Connect connect;
@PostMapping("/update")
    public Topic updateTopic(@RequestBody Topic topic){
        connect.save(topic);
         return topic;
    }
}
  

>

@Entity
@Table(name = "info")
public class Topic implements Serializable {
    private static final long serialVersionUID = -3009157732242241606L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "name")
    @JsonView(View.Summary.class)
    private String name;

    @Column(name = "description")
    @JsonView(View.Summary.class)
    private String description;

    public  Topic (){

    }


    public Topic(String name,String description){
        this.name = name;
        this.description = description;
    }

    public Topic(Long id,String name,String description){
        this.id = id;
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public Long getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}

如何编写json以匹配自动增量并插入新ID?

2 个答案:

答案 0 :(得分:0)

您完全不需要为JSON中的新实体生成ID。

请参见Serializable save(Object object)的javadoc:

“坚持给定的瞬态实例,首先分配一个生成的标识符。(如果使用分配的生成器,则使用标识符属性的当前值。”)

因此,用简单的话来说,您应该生成不带ID的新实体JSON,并让Hibernate为新实体生成新的ID。这样,新ID将遵循您为此实体选择的ID生成策略(在您的情况下为@GeneratedValue(strategy = GenerationType.AUTO))。

答案 1 :(得分:0)

我已经解决了这个问题,只是改变了

@GeneratedValue(strategy = GenerationType.AUTO)

@GeneratedValue(strategy = GenerationType.IDENTITY)