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