Java 原因:org.hibernate.QueryException:无法解析属性:last\u name
我有这个代码工作,有我想要的输出Java 原因:org.hibernate.QueryException:无法解析属性:last\u name,java,hibernate,Java,Hibernate,我有这个代码工作,有我想要的输出 String hql = "FROM Employee ORDER BY last_name"; Query query = session.createQuery(hql); employeeList = query.list(); 我试过这个代码,但失败了 String hql = "FROM Employee E ORDER BY E.last_name"; Query query = session.createQuery(hql); em
String hql = "FROM Employee ORDER BY last_name";
Query query = session.createQuery(hql);
employeeList = query.list();
我试过这个代码,但失败了
String hql = "FROM Employee E ORDER BY E.last_name";
Query query = session.createQuery(hql);
employeeList = query.list();
这是个例外
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: last_name of: com.hibernate.exercise6.model.Employee [FROM com.hibernate.exercise6.model.Employee E ORDER BY E.last_name]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:131)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:631)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:101)
at com.hibernate.exercise6.service.EmployeeFunctions.listEmployees(EmployeeFunctions.java:208)
at com.hibernate.exercise6.app.GUIMain.displayListMenu(GUIMain.java:329)
at com.hibernate.exercise6.app.GUIMain.manageRecords(GUIMain.java:140)
at com.hibernate.exercise6.app.GUIMain.main(GUIMain.java:62)
Caused by: org.hibernate.QueryException: could not resolve property: last_name of: com.hibernate.exercise6.model.Employee [FROM com.hibernate.exercise6.model.Employee E ORDER BY E.last_name]
at org.hibernate.QueryException.generateQueryException(QueryException.java:120)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:152)
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:521)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:623)
... 5 more
Caused by: org.hibernate.QueryException: could not resolve property: last_name of: com.hibernate.exercise6.model.Employee
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1801)
at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:393)
at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:505)
at org.hibernate.hql.internal.ast.tree.DotNode.getDataType(DotNode.java:660)
at org.hibernate.hql.internal.ast.tree.DotNode.prepareLhs(DotNode.java:264)
at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:204)
at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:109)
at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:104)
at org.hibernate.hql.internal.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:1013)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1286)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.orderExpr(HqlSqlBaseWalker.java:1860)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.orderExprs(HqlSqlBaseWalker.java:1657)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.orderClause(HqlSqlBaseWalker.java:1630)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:652)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
... 11 more
第一个代码和第二个代码的行为不应该相同吗?只介绍了一个别名,对吗
lastName
,列名为last\u name
。因此,如果使用HQL,则必须使用属性,如果要实现NativeQuery
,则可以使用列名Employee
实体执行SELECT
子句,该实体具有name
属性,最后一个具有lastName
属性。因此,您的查询必须写为以下内容:
String hql = "FROM Employee E ORDER BY E.name.lastName";
Query query = session.createQuery(hql);
employeeList = query.list();
lastName
,列名为last\u name
。因此,如果使用HQL,则必须使用属性,如果要实现NativeQuery
,则可以使用列名Employee
实体执行SELECT
子句,该实体具有name
属性,最后一个具有lastName
属性。因此,您的查询必须写为以下内容:
String hql = "FROM Employee E ORDER BY E.name.lastName";
Query query = session.createQuery(hql);
employeeList = query.list();
您可以发布
员工
代码吗?您的员工
课程中没有姓
。您的HQL中应该是lastName
。您可以发布Employee
code吗?您的Employee
类中没有last\u name
。在你的HQL中应该是lastName
。回答得好!我想添加到答案-使用标准API。其保存的查询语言。Hibernate将在没有您的情况下构造查询。它看起来像return createCriteria(Employee.class).addOrder(Order.asc(“name”)).list()它实际上应该是E.name.lastName
,因为lastName
是Employee
的组件name
中的一个字段,谢谢您的好答案!我想添加到答案-使用标准API。其保存的查询语言。Hibernate将在没有您的情况下构造查询。它看起来像return createCriteria(Employee.class).addOrder(Order.asc(“name”)).list()它实际上应该是E.name.lastName
,因为lastName
是Employee
的组件name
中的一个字段,谢谢你的想法
String hql = "FROM Employee E ORDER BY E.name.lastName";
Query query = session.createQuery(hql);
employeeList = query.list();