我使用 springboot 创建 Web 服务并与我的角度项目连接 所以,我在 CrudRepository 中使用 save(( 来插入和更新,但是当我在 POSTMAN 中使用 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,它会失败。
杰伦示例
{ "id": 5, <------auto_increment ">
姓名": "约翰", "描述":"帅气" }
@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?
您根本不需要在 JSON 中为新实体生成 ID。
参见Serializable save(Object object)
的 Javadoc :
"保留给定的瞬态实例,首先分配生成的标识符。(或者,如果使用分配的生成器,则使用标识符属性的当前值。
因此,简而言之,您应该生成没有ID的新实体JSON,并让Hibernate为新实体生成新ID。这样,新 ID 将遵循您为此实体选择的 ID 生成策略(在您的情况下@GeneratedValue(strategy = GenerationType.AUTO)
(。
我已经解决了这个问题,我只是改变了
@GeneratedValue(strategy = GenerationType.AUTO)
自
@GeneratedValue(strategy = GenerationType.IDENTITY)