2016-02-25 59 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