给出java.lang.IllegalArgumentException的Hibernate查询:遍历的节点不能为null

Pau*_*lor 6 java hibernate

这个简单的查询

session = com.jthink.songlayer.hibernate.HibernateUtil.getSession();
Query q = session.createQuery("recNo from SongChanges");
Run Code Online (Sandbox Code Playgroud)

给这个堆栈跟踪

java.lang.IllegalArgumentException: node to traverse cannot be null!
    at org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:272)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:119)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:214)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:192)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1537)
Run Code Online (Sandbox Code Playgroud)

如果我做

session = com.jthink.songlayer.hibernate.HibernateUtil.getSession();
Query q = session.createQuery("from SongChanges");
Run Code Online (Sandbox Code Playgroud)

我没有得到错误,但我只需要recNo

有任何想法吗 ?

Pab*_*blo 12

你忘记了选择:

Query q = session.createQuery("select sc.recNo from SongChanges sc");
Run Code Online (Sandbox Code Playgroud)

  • @ijabz select子句(表示单词select和您要选择的字段)不是必需的.但是你必须从"从"开始,然后你得到了实体.如果要选择特定字段,则必须选择. (3认同)
  • 啊,好的,谢谢.我认为hibernate失败的地方是,如果出现问题,它生成的错误消息很少有用. (2认同)
  • 我已阅读文档,事实上我已经投入并阅读了几本关于Hibernate的书籍,并不意味着我不允许在我的代码中犯错误.如果hibernate中的错误消息总是比我使用的任何其他成熟库更差. (2认同)