2016-08-24 14 views
0

私はクラスJunctionManagementListDtoの実際のJavaオブジェクトを生成するためにhqlを使用しています。しかし、私は私のHQLクエリをQuerySyntaxException:クラスを見つけることができません

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);   
} 

として必要なすべての輸入品でJnMgmtLogDaoImplクラス内に記述されており、JunctionManagementListDtoが

パブリッククラスJunctionManagementListDtoとして宣言されている

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) 
...... 

私のコンソール上で以下の例外を除いて終わります{

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(){ 

} 
} 

この例外はどのように解決できますか?

+0

>>>ランタイム<<クラスパスにあるJARファイル(または何でも)はありますか? –

+0

@StephenCはいその部分に問題はありません。 – Augustus

答えて

5

この問題は、コンストラクタの完全修飾名を指定することで解決しました。

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);   
} 
関連する問題