Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 原因:org.hibernate.QueryException:无法解析属性:last\u name_Java_Hibernate - Fatal编程技术网

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  
第一个代码和第二个代码的行为不应该相同吗?只介绍了一个别名,对吗

  • 在HQL中,您可以通过实体的属性访问真实的列名。在您的情况下,属性名为
    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
    ,列名为
    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();