Подтвердить что ты не робот

Node для перемещения не может быть null (Hibernate SQL)

Я выполняю SQL-запрос через спящий режим, который выглядит так:

SELECT thi 
FROM track_history_items thi 
JOIN artists art 
  ON thi.artist_id = art.id 
WHERE thi.type = "TrackBroadcast" 
GROUP BY art.name 
ORDER thi.createdAt DESC

но я получаю сообщение, что "Node для перемещения не может быть null!". Кто-нибудь знает, что может быть причиной этого?

- ИЗМЕНИТЬ -

Я уверен, что эта проблема вызвана тем, что artist_id имеет значение null. Однако я не могу этого предотвратить, поэтому могу просто пропустить строки строки track_history_item, у которых есть null artist_id?

4b9b3361

Ответ 1

node для перемещения не может быть null!

Это общее сообщение об ошибке Hibernate, указывающее на проблему синтаксиса в вашем запросе. В качестве другого примера, забыв при запуске предложения select со словом "SELECT", вы получите ту же ошибку.

В этом случае синтаксическая ошибка возникает из-за предложения on - HQL не поддерживает их. Вместо этого перекрестно присоединяется так:

FROM track_history_items thi, artists art 
WHERE thi.type = "TrackBroadcast" 
AND  thi.artist_id = art.id 
GROUP BY art.name 
ORDER thi.createdAt DESC

Ответ 2

У меня есть эта ошибка только потому, что я объявлял createQuery вместо createNamedQuery. Поэтому, обнаруживая это, hibernate генерирует исключение

    Query query = entityManager.createQuery("DS.findUser");

Ответ 3

Я сталкивался с этой проблемой несколько раз и раньше, и всегда было так, что код пытался запустить именованный запрос, вызывая createQuery вместо createNamedQuery, например. если у вас есть именованный запрос с именем "FIND_XXX", тогда код будет вызывать entityManager.createQuery(FIND_XXX), в результате чего он пытается выполнить строку, представляющую имя именованного запроса, как если бы это был стандартный динамический запрос String (что, очевидно, является проблемой).

Ответ 4

Эта ошибка возникает, как правило, из-за одной из самых глупых причин, о которых никто даже не подумал. Если вы скопируете копию вставить запрос, появятся некоторые специальные символы, и вы начнете получать эту ошибку. Убедитесь, что вы вводите запрос вручную, и он будет работать нормально. По крайней мере, в моем случае это сработало.