2016-11-23 5 views
2

Я хочу использовать весенний запас данных для обновления строк определенного пользователя, но во время выполнения этот запрос имеет странное «кросс-соединение», добавленное к запросу.spring data rest update произвести cross join sql error

весна метод остальные временные данные

@Modifying 
@Transactional 
@Query("Update Notification n SET n.noticed = true Where n.notificationPost.owner.userId = 1 ") 
public void postNoticed(); 

запустить созданный запрос

Hibernate: update notification cross join set noticed=true where owner_id=? 

Моя единственная забота почему "перекрестное соединение" добавил, поскольку это дает ошибку SQL

org.postgresql.util.PSQLException: ERROR: syntax error at or near "cross" 

я называю этот метод напрямую с помощью вызова rest, а также из контроллера mvc, оба способа создают ту же ошибку

Заранее спасибо.

+0

Покажите нам некоторые объекты фрагмент код – Blank

ответ

2

Найдено решение, как указано в http://forum.spring.io/forum/spring-projects/data/114271-spring-data-jpa-modifying-query-failure

«Нет соединение, либо прямого или косвенного, может быть указано в запросе насыпной HQL. Суб-запросы могут быть использованы в где-п, где подзапросы могут сами содержать присоединяется «(Hibernate ссылки Doc: http://docs.jboss.org/hibernate/core.../#batch-direct).».

Я отредактировал мой код, чтобы использовать подзапрос

@Modifying 
@Transactional 
@Query("Update Notification n SET n.noticed = true Where n.notificationPost.postId in (SELECT n2.notificationPost.postId FROM Notification n2 where n2.notificationPost.owner.userId =:#{#security.principal.user.userId}) ") 
public int postNoticed(); 
+0

Это относится только к операциям DML стиля.. – Alex78191