gpt4 book ai didi

java - 由 : org. hibernate.QueryException 引起:无法解析属性:last_name

转载 作者:行者123 更新时间:2023-12-02 03:28:13 25 4
gpt4 key购买 nike

我有这个代码工作,具有我想要的输出

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)

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

员工.java

package com.hibernate.exercise6.model;

import java.util.Set;
import java.util.Comparator;

public class Employee extends Id{
private int uniqueId;
private Name nameInfo;
private Address addressInfo;
private OtherInfo otherInfo;
private Set contact;
private Set role;

public Employee() {}

public Employee(Name nameInfo, Address addressInfo, OtherInfo otherInfo){
this.nameInfo = nameInfo;
this.addressInfo = addressInfo;
this.otherInfo = otherInfo;
}

public void setId(int uniqueId){
this.uniqueId = uniqueId;
}
public int getId(){
return uniqueId;
}

public void setName(Name nameInfo){
this.nameInfo = nameInfo;
}
public Name getName(){
return nameInfo;
}

public void setAddress(Address addressInfo){
this.addressInfo = addressInfo;
}
public Address getAddress(){
return addressInfo;
}

public void setOtherInfo(OtherInfo otherInfo){
this.otherInfo = otherInfo;
}
public OtherInfo getOtherInfo(){
return otherInfo;
}

public void setContacts(Set contact){
this.contact = contact;
}
public Set getContacts(){
return contact;
}

public void setRole(Set role){
this.role = role;
}
public Set getRole(){
return role;
}

public static Comparator<Employee> employeeGwaComparator = new Comparator<Employee>(){
public int compare(Employee emp1, Employee emp2){
String emp1Gwa = String.valueOf(emp1.otherInfo.getGwa());
String emp2Gwa = String.valueOf(emp2.otherInfo.getGwa());

return emp1Gwa.compareTo(emp2Gwa);
}
};
}

名称.java

package com.hibernate.exercise6.model;

public class Name{
private String firstName,
lastName,
middleName,
suffix,
title;

public Name() {}

public Name(String title, String firstName, String middleName, String lastName, String suffix){
this.title = title;
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
this.suffix = suffix;
}

public void setTitle(String title){
this.title = title;
}
public String getTitle(){
return title;
}

public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getFirstName(){
return firstName;
}

public void setMiddleName(String middleName){
this.middleName = middleName;
}
public String getMiddleName(){
return middleName;
}

public void setLastName(String lastName){
this.lastName = lastName;
}
public String getLastName(){
return lastName;
}

public void setSuffix(String suffix){
this.suffix = suffix;
}
public String getSuffix(){
return suffix;
}
}

第一个代码和第二个代码的行为不应该相同吗?仅引入了别名,我对吗?

最佳答案

  1. 在 HQL 中,您可以通过实体的属性访问真实的列名称。在您的情况下,属性名称为 lastName,列名称为 last_name。因此,如果您使用 HQL,则必须使用属性;如果您想实现 NativeQuery,则可以使用列名称。

  2. 您正在对 Employee 实体执行 SELECT 子句,该实体具有 name 作为属性,并且最后一个具有 lastName 也是属性。所以你的查询必须写成如下:

    String hql = "FROM Employee E ORDER BY E.name.lastName";  
    Query query = session.createQuery(hql);
    employeeList = query.list();

关于java - 由 : org. hibernate.QueryException 引起:无法解析属性:last_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38494219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com