2016-02-25 1 views
1

Я получаю следующее сообщение об ошибке при попытке реализовать мой query ниже:org.hibernate.hql.internal.ast.QuerySyntaxException: неожиданный маркер

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

Моего запрос в роднике данных PersonRepository которая простирается CrudRepository

Запрос:

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

Что такое ошибка в моем синтаксисом?

+0

Следует entity.id вместо person.id в котором пункт –

+0

Извините, что была опечатка, я уже entity.id – java123999

+0

хорошо, и вам не нужно лицо в скобках для удаления –

ответ

1

У вас нет правильного синтаксиса запроса DELETE, он должен выглядеть следующим образом.

DELETE FROM Person entity WHERE entity.id = :id 

Кстати есть delete метод, который делает именно то, что вы хотите в самом CrudRepository. Поэтому нет необходимости дублировать его.

+0

Является ли это исходным запросом? – java123999

+0

ok как бы использовать этот предварительно написанный метод?> – java123999

+0

Нет, это запрос JPQL. –

0

запрос должен быть:

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

удалит объект из БД, когда сделка совершается.

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(), поскольку вы пытаетесь вернуть список , что невозможно из инструкции delete. Замените возвращаемый тип на void. – Marius

Смежные вопросы