我使用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?
答案 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)