如何在spring数据中插入db?

如何在spring数据中插入db?,spring,spring-data,Spring,Spring Data,我想请求将数据插入我的数据库。该表有4列:ID_文档(PK)、ID_任务、描述、文件路径 实体 ... @Column(name = "ID_TASK") private Long idTask; @Column(name = "DESCRIPTION") private String description; @Column(name = "FILEPATH") private String filepath; ... @Modifying @Query("insert into T

我想请求将数据插入我的数据库。该表有4列:ID_文档(PK)、ID_任务、描述、文件路径

实体

... 
@Column(name = "ID_TASK")
private Long idTask;


@Column(name = "DESCRIPTION")
private String description;

@Column(name = "FILEPATH")
private String filepath;
...
@Modifying
@Query("insert into TaskDocumentEntity c (c.idTask, c.description, c.filepath) values (:id,:description,:filepath)")
public void insertDocumentByTaskId(@Param("id") Long id,@Param("description") String description,@Param("filepath") String filepath);
存储库

... 
@Column(name = "ID_TASK")
private Long idTask;


@Column(name = "DESCRIPTION")
private String description;

@Column(name = "FILEPATH")
private String filepath;
...
@Modifying
@Query("insert into TaskDocumentEntity c (c.idTask, c.description, c.filepath) values (:id,:description,:filepath)")
public void insertDocumentByTaskId(@Param("id") Long id,@Param("description") String description,@Param("filepath") String filepath);
控制器

@RequestMapping(value = "/services/tasks/addDocument", method = RequestMethod.POST)
@ResponseBody
public void set(@RequestParam("idTask") Long idTask,@RequestParam("description") String description,@RequestParam("filepath") String filepath){

    //TaskDocumentEntity document = new TaskDocumentEntity();
    taskDocumentRepository.insertDocumentByTaskId(idTask,descriere,filepath);
}
当我运行测试时,出现以下错误: 由以下原因引起:org.hibernate.hql.ast.QuerySyntaxException:预期打开,在第1行第32列附近找到“c”[插入TaskDocumentEntity c(c.idTask,c.descriere,c.filepath)值(:id,:descriere,:filepath)]
我试图删除别名c,但仍然不起作用。

Spring data提供了用于插入数据库的现成方法
save
,无需使用
@Query
。看看springData()的核心概念

因此,在控制器中,只需创建对象
TaskDocumentEntity
,并将其传递到存储库

@RequestMapping(value = "/services/tasks/addDocument", method = RequestMethod.POST)
@ResponseBody
public void set(@RequestParam("idTask") Long idTask,@RequestParam("description") String description,@RequestParam("filepath") String filepath){

// assign parameters to taskDocumentEntity by constructor args or setters
        TaskDocumentEntity document = new TaskDocumentEntity(idTask,descriere,filepath);
        taskDocumentRepository.save(document);
    }

有一种方法可以做到这一点,但这取决于您使用的数据库。下面是我在Oracle的工作经历(使用双表):


我不确定您使用的是哪一个数据库,下面有一个链接,在底部显示了哪一个数据库支持在没有from子句的情况下选择STMT:

删除您的
insertDocumentByTaskId
。在控制器中,创建
TaskDocumentEntity
的实例,设置属性并调用
save
方法。JPA的全部要点是,您不必再编写查询了……请发布存储库类的代码,不仅是方法声明,还发布spring配置类/xml。我也尝试了这个方法,但没有坚持,没有更改数据库(成功测试),它现在可以工作了,我没有在测试类中注入服务,也没有为请求传递任何参数,无论如何我已经重写了控制器,非常感谢大家!!!