que*_*326 6 spring spring-data
我想发出一个将数据插入我的数据库的请求.该表有4列:ID_DOCUMENT(PK),ID_TASK,DESCRIPTION,FILEPATH
实体
...
@Column(name = "ID_TASK")
private Long idTask;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "FILEPATH")
private String filepath;
...
Run Code Online (Sandbox Code Playgroud)
知识库
@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);
Run Code Online (Sandbox Code Playgroud)
调节器
@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);
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的测试时,我收到此错误: 引起:org.hibernate.hql.ast.QuerySyntaxException:期待OPEN,在第1行第32列附近找到'c'[插入TaskDocumentEntity c(c.idTask,c.descriere) ,c.filepath)values(:id,:descriere,:filepath)] 我试图删除别名c,但仍然无法正常工作.
Spring数据提供了save用于插入数据库的开箱即用方法 - 无需使用@Query.看一下springData的核心概念(http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.core-concepts)
因此在您的控制器中只需创建对象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);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
有一种方法可以做到这一点,但这取决于您使用的数据库。下面在 Oracle 中为我工作(使用双表):
@Repository
public interface DualRepository extends JpaRepository<Dual,Long> {
@Modifying
@Query("insert into Person (id,name,age) select :id,:name,:age from Dual")
public int modifyingQueryInsertPerson(@Param("id")Long id, @Param("name")String name, @Param("age")Integer age);
}
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,它将是(如果是 Oracle):
@Modifying
@Query("insert into TaskDocumentEntity (idTask,description,filepath) select :idTask,:description,:filepath from Dual")
public void insertDocumentByTaskId(@Param("idTask") Long id,@Param("description") String description,@Param("filepath") String filepath)
Run Code Online (Sandbox Code Playgroud)
我不确定您使用的是哪个 db,这里有一个链接,它在底部显示哪个 db 支持 select stmts 没有 from 子句:http ://modern-sql.com/use-case/select-without-from
| 归档时间: |
|
| 查看次数: |
31578 次 |
| 最近记录: |