给出java.lang.IllegalArgumentException的Hibernate查询:遍历的节点不能为null
这个简单的查询
session = com.jthink.songlayer.hibernate.HibernateUtil.getSession(); Query q = session.createQuery("recNo from SongChanges");
给这个堆栈跟踪
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.(HQLQueryPlan.java:101) at org.hibernate.engine.query.spi.HQLQueryPlan.(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)
如果我做
session = com.jthink.songlayer.hibernate.HibernateUtil.getSession(); Query q = session.createQuery("from SongChanges");
我没有得到错误,但我只需要recNo
有任何想法吗 ?
你忘记了选择:
Query q = session.createQuery("select sc.recNo from SongChanges sc");
当您使用createQuery
方法运行命名查询而不是getNamedQuery
,通常会发生此错误,例如:
session.createQuery("InvoiceItem.itemsFromInvoice")
当正确的方法将是
session.getNamedQuery("InvoiceItem.itemsFromInvoice")
SELECT子句比from子句提供对结果集的更多控制。 如果要获取对象的少数属性而不是完整对象,请使用SELECT子句。 以下是使用SELECT子句获取Employee对象的名称字段的简单语法:
String hql = "SELECT E.name FROM Employee E"; Query query = session.createQuery(hql); List results = query.list();
如果你想要整个对象,则不需要时间“select * from”。
- 线程“main”中的exceptionorg.hibernate.MappingException:未知实体
- Hibernate实体字段camelcase,数据库下划线
- spring-hibernate花费更多时间的原因是什么?
- datetimeoffset hibernate mapping
- 如何遍历Object数组列表
- Spring Data Repository不会删除ManyToOne Entity
- 使用hibernate与数据库连接时出错
- 如何使用Hibernate注释将Java日期映射到mysql中的DATETIME(默认情况下为TIMESTAMP)
- Spring,Hibernate和JPA:在entitymanager上调用persist似乎没有提交数据库