Spring CrudRepository将值插入mysql数据库

时间:2017-03-30 10:12:22

标签: java mysql spring hibernate

我想创建一个执行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方法都运行良好。

2 个答案:

答案 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检查