2016-02-25 63 views
1

我收到以下錯誤,當我試圖實現我下面queryorg.hibernate.hql.internal.ast.QuerySyntaxException:意外的標記

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token 

我的查詢是一個Spring數據PersonRepository擴展CrudRepository

查詢:

@Modifying 
@Transactional 
@Query("DELETE (entity) FROM Person entity WHERE entity.id = :id") 
List<Person> deleteFromPersonWithId(@Param("id") String id); 

什麼是我的語法錯誤?

+0

應該到位person.id來entity.id在where子句 –

+0

對不起,這是一個錯字,我有entity.id – java123999

+0

確定,你不需要實體的括號內爲刪除 –

回答

1

您沒有正確的DELETE查詢語法,它應該看起來像這樣。

DELETE FROM Person entity WHERE entity.id = :id 

順便說有一個delete方法,它不正是你在CrudRepository自己想要的東西。所以不需要複製它。

+0

這是一個本地查詢嗎? – java123999

+0

好的,我將如何使用這種預先寫好的方法呢?> – java123999

+0

不,這是JPQL查詢。 –

0

查詢必須是:

@Query("DELETE FROM Person entity WHERE entity.id = :id") 
0
entityManager.remove(entityInstance) 

將從DB當事務提交刪除實體。

0

改變你的註釋,

@Modifying 
@Transactional 
@Query("DELETE FROM Person WHERE id = :id") 
void deleteFromPersonWithId(@Param("id") String id); 
+0

獲取錯誤:org.hibernate.hql.internal.QueryExecutionRequestException:不支持DML操作 – java123999

+0

可能hibernate正在調用query.list()語句,因爲你試圖返回一個列表,這從刪除語句中是不可能的。用void替換返回類型。 – Marius