Обновить значение с помощью соединения - PullRequest
8 голосов
/ 01 июня 2011

используя Hibernate, я хотел бы обновить данные в базе данных на основе условий, но я получил следующую ошибку: «узел к перемещению не может быть пустым»

Вот описание моей базы данных:

Account: id, email, password
Member : id, account, team
Team: id, current (and a reference to member => members)

Вот мой JPA:

UPDATE Team t SET t.current = :current LEFT JOIN t.members m WHERE t.current = :current_true AND m.account = :account

Что я делаю не так?Если я перенесу ЛЕВОЕ СОЕДИНЕНИЕ до SET:

UPDATE Team t LEFT JOIN t.members m SET t.current = :current WHERE t.current = :current_true AND m.account = :account

Я получу: «Ожидается SET, найден ВЛЕВО»

Если я удаляю соединение:

UPDATE Team t SET t.current = :current WHERE t.current = :current_true AND t.members.account = :account

Я получил: «Незаконная попытка разыменования коллекции».

Как правильно обновлять значения?

Спасибо за помощь!

Ответы [ 2 ]

12 голосов
/ 08 мая 2014

Использовать подзапрос:

(не тестировалось)

UPDATE Team t SET t.current = :current 
WHERE t.id in (select t1.id from Team t1  LEFT JOIN t1.members m WHERE t1.current = :current_true AND m.account = :account)
8 голосов
/ 07 июня 2011

Спецификация JPA 2.0 в главе 4 содержит подробную информацию обо всех поддерживаемых функциях в JPQL.Это определение оператора «update»:

Синтаксис этих операций следующий:

update_statement ::= update_clause [where_clause]
 update_clause ::= UPDATE entity_name [[AS] identification_variable] 
                     SET update_item {, update_item}*
  update_item ::= [identification_variable.]{state_field | single_valued_object_field} =
                     new_value 
new_value ::= 
   scalar_expression |
   simple_entity_expression |
   NULL

Как видите, поддержка нескольких сущностей здесь не указана.Я думаю, вам придется найти другой способ сделать это, возможно, создать метод, который сначала выбирает сущности, которые вы хотите обновить, а затем перебираете результаты, устанавливая значения.Или вы можете использовать собственное обновление SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...