2015-10-07 77 views
3

我要作出这样的数据插入到我的数据库的请求。表中有4列:ID_DOCUMENT(PK),ID_TASK,说明,FILEPATH如何在spring数据中插入db?

实体

... 
@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:期待OPEN,在第1行第32列附近找到'c'[插入到TaskDocumentEntity c(c.idTask ,c.descriere,c.filepath)值(:身份证,:descriere,:文件路径)] 我试图删除别名℃,甚至不`吨的工作。

+0

删除你的'insertDocumentByTaskId'。在你的控制器创建的'TaskDocumentEntity'设置的属性的实例,并调用'save'方法。 JPA的整点是,你不必再编写查询... –

+0

请张贴的代码资源库类不仅在方法声明,并发表您的春天配置类/ XML。 – dubonzi

回答

4

弹簧数据提供了开箱即用的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); 
    } 
+1

我尝试这样做还可以,但不'吨坚持,不改变数据库(成功的测试) – que1326

+0

它现在,我didn't注入服务的测试类,并didn't传递任何PARAMS的要求,反正我已经重写了控制器,非常感谢! – que1326

2

有办法做到这一点,但它取决于分贝你”重新使用。下面为我​​工作在甲骨文(使用双表):

@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); 
} 

所以你的情况,这将是(如果甲骨文):

@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) 

我不知道哪个DB你使用,这里有一个链接,显示在底部,其分贝的不支持选择撑条from子句:http://modern-sql.com/use-case/select-without-from