如何在spring数据中插入db?
我想请求将数据插入我的数据库。该表有4列:ID_文档(PK)、ID_任务、描述、文件路径 实体如何在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
...
@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。我也尝试了这个方法,但没有坚持,没有更改数据库(成功测试),它现在可以工作了,我没有在测试类中注入服务,也没有为请求传递任何参数,无论如何我已经重写了控制器,非常感谢大家!!!