tis*_*was 25 sql null hibernate
我正在通过hibernate执行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
Run Code Online (Sandbox Code Playgroud)
但我收到的消息是"节点遍历不能为空!".有人知道是什么原因引起的吗?
- 编辑 -
我很确定这个问题是由于artist_id为null的可能性造成的.但是,我无法阻止这种情况,所以我可以跳过具有null artist_id的行track_history_item行吗?
小智 38
我有这个错误只是因为我声明了createQuery而不是createNamedQuery.所以当检测到这个时,hibernate会抛出异常
Query query = entityManager.createQuery("DS.findUser");
Run Code Online (Sandbox Code Playgroud)
小智 33
要遍历的节点不能为空!
这是一个通用的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
Run Code Online (Sandbox Code Playgroud)
bre*_*777 19
我之前已经多次遇到过这个问题,并且一直都是代码试图通过调用来运行命名查询,createQuery而不是createNamedQuery,例如,如果你有一个命名的命名查询,"FIND_XXX"那么代码将调用entityManager.createQuery(FIND_XXX),这会导致它试图执行表示命名查询名称的String,就好像它是一个标准的动态查询字符串(这显然是一个问题).
如果您执行有语法错误的查询,例如忘记更新语句中的逗号,您也可能会收到此错误
update MyObject set field1=5 field2=4 WHERE id = 4
Run Code Online (Sandbox Code Playgroud)
看看如何在 field1=5 和 field2=4 之间缺少逗号?你会得到一个要遍历的节点不能为空的错误。