gpt4 book ai didi

java - 查询语法异常 : Unable to locate class

转载 作者:行者123 更新时间:2023-12-01 11:21:45 25 4
gpt4 key购买 nike

我正在使用 hql 生成类 JunctionManagementListDto 的实际 Java 对象。但我最终在我的控制台上出现以下异常

org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate class [JunctionManagementListDto] [SELECT new JunctionManagementListDto(c.siteId, c.name, c.ip, c.customer.id, zm.zone.name) FROM com.traff.hibernate.model.Controllers c, com.traff.hibernate.model.ZoneControllerMapping zm WHERE c.siteId = zm.controller.siteId  ]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:255)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1735)
at com.traff.hibernate.generic.GenericDAOImpl.readListByHql(GenericDAOImpl.java:107)
at com.traff.hibernate.daoImpl.JnMgmtLogDaoImpl.getJunctionManagementList(JnMgmtLogDaoImpl.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy175.getJunctionManagementList(Unknown Source)
at com.traff.service.report.JunctionManagementReportService.prepareStatusList(JunctionManagementReportService.java:37)
at com.traff.service.report.JunctionManagementReportService$$FastClassBySpringCGLIB$$472093e1.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
......

我的 hql 查询写在 JnMgmtLogDaoImpl 类中,所有必要的导入为
public List<JunctionManagementListDto> getJunctionManagementList(String zoneName, Integer customerId) {     
String hql = "SELECT new JunctionManagementListDto(c.siteId, c.name, c.ip, c.customer.id, zm.zone.name) "
+"FROM Controllers c, ZoneControllerMapping zm "
+"WHERE c.siteId = zm.controller.siteId ";

if(zoneName != "")
hql += " and zm.zone.name='"+zoneName+"' ";
if (customerId!=null)
hql += " and zm.controller.customer.id='"+customerId+"' ";
return super.readListByHql(hql);
}

并且 JunctionManagementListDto 被声明为

公共(public)类 JunctionManagementListDto {
private String zoneName;
private Integer siteId;
private String name;
private String ip;
private Integer customerId;
public String getZoneName() {
return zoneName;
}
public void setZoneName(String zoneName) {
this.zoneName = zoneName;
}
public Integer getSiteId() {
return siteId;
}
public void setSiteId(Integer siteId) {
this.siteId = siteId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Integer getCustomerName() {
return customerId;
}
public void setCustomerName(Integer customerId) {
this.customerId = customerId;
}

public JunctionManagementListDto(Integer siteId, String zoneName, String ip, Integer customerId, String junctionName) {
super();
this.siteId = siteId;
this.customerId = customerId;
this.ip = ip;
this.zoneName = zoneName;
name = junctionName;
}

public JunctionManagementListDto(){

}
}

是什么导致了这个异常,我该如何解决?

最佳答案

我通过指定构造函数的完全限定名称解决了这个问题。

public List<JunctionManagementListDto> getJunctionManagementList(String zoneName, Integer customerId) {     
String hql = "SELECT new (packagename).JunctionManagementListDto(c.siteId, c.name, c.ip, c.customer.id, zm.zone.name) "
+"FROM Controllers c, ZoneControllerMapping zm "
+"WHERE c.siteId = zm.controller.siteId ";

if(zoneName != "")
hql += " and zm.zone.name='"+zoneName+"' ";
if (customerId!=null)
hql += " and zm.controller.customer.id='"+customerId+"' ";
return super.readListByHql(hql);
}

关于java - 查询语法异常 : Unable to locate class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39122437/

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