2015-10-07 83 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