我想创建一个执行insert语句的@PostMapping
。这是我的代码:
存储库(我有findAllBy功能正常工作)。这是插入功能,显然不起作用。 - >
@Transactional
@Query(value = "INSERT INTO recipes(title, description) VALUES (?1, ?2)", nativeQuery = true)
void insertRecipes(String title, String description);
@PostMapping(path = "/all/create")
public void addRecipes(@RequestParam("title") String title, @RequestParam(value = "description") String description){
Recipes recipe = new Recipes();
recipe.setTitle(title);
recipe.setDescription(description);
repo.insertRecipes(recipe.getTitle(), recipe.getDescription());
}
我没有提及配方ID,因为它是自动递增的。这是我的实体 - >
@Entity
public class Recipes {
@Column(name = "id")
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
//getters-setters and constructions below.
}
我的问题是我得到了这个例外 - > java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
有什么想法吗? PS。我已正确完成所有连接。所有的GET方法都运行良好。
答案 0 :(得分:0)
使用您的代码,Spring和最终EntityManager
创建一个Query
对象,在该对象上调用其中一个查询方法。这不会起作用,因为你正在触发插入..
为了让它调用executeUpdate()
,这是你最终的目标,你必须添加@Modifyng
注释。
答案 1 :(得分:0)
<强>控制器强>
@RequestMapping(
value = "/all/create",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Recipes> create(
@RequestBody Recipes recipes) {
Recipes saved= recipesService.add(recipes);
return new ResponseEntity<Recipes>(saved, HttpStatus.CREATED);
}
<强>服务强>
public Recipes add(Recipes recipes) {
Recipes save = recipesRepository.save(recipes);
return save;
}
如果您正在处理JSON,那么您可以使用它并使用Postman检查