2015-07-21 4 views
3

Я создаю веб-сервис, чтобы получить раскрывающийся список на основе другого выпадающего списка.Ошибка с запросом JPA

класс JPA:

public interface TbiAuthorizationMasterDao extends CrudRepository<TbiAuthorizationMaster, Integer>, JpaRepository<TbiAuthorizationMaster, Integer> { 

@Query("select a.authorizationName from TbiAuthorizationMaster a, TbiAuthorizationDetail d where a.authorizationId=d.tbiAuthorizationMaster.authorizationId and d.valueName=?1") 
    List<TbiAuthorizationMaster> findByValueName(String valueName); 
} 

Постоянство Класс:

@Override 
    public List getReportList(String reportType) { 
     List<TbiAuthorizationMaster> reportList = tbiAuthorizationMasterDao.findByValueName(reportType); 
     List<AuthMaster> detailResponse = new ArrayList<>(); 

     for(TbiAuthorizationMaster aDeatil: reportList){ 
      AuthMaster res = new AuthMaster(); 
      res.setAuthorizationId(aDeatil.getAuthorizationId()); 
      res.setAuthorizationName(aDeatil.getAuthorizationName()); 
      detailResponse.add(res); 
     } 
     return detailResponse; 
    } 

Я получаю ошибку, которую я не понимая. Bcoz я использовал то же самое в другой службе. Он работал отлично, в этом он не работает, где я вхожу в 2 таблицы в запросе

Журнал ошибок:

java.lang.ClassCastException: java.lang.String cannot be cast to com.acinfotech.timebound.jpa.model.TbiAuthorizationMaster 
    at com.acinfotech.timebound.jpa.service.ReportJobsPersistenceServiceImpl.getReportList(ReportJobsPersistenceServiceImpl.java:7876) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy81.getReportList(Unknown Source) 
    at com.acinfotech.timebound.restservice.service.RestServiceImpl.getReportList(RestServiceImpl.java:2771) 
    at com.acinfotech.timebound.restservice.service.RestrsService.listReports(RestrsService.java:9940) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 

Ошибка в строке:

for(TbiAuthorizationMaster aDeatil: reportList){ 

может кто-то пожалуйста, помогите в этом.

+1

Это query return String List. – ozgur

ответ

4

Вы пытаетесь отличить a.authorizationName (я думаю, это String) до TbiAuthorizationMaster класс.

Попробуйте изменить запрос:

@Query("select a from TbiAuthorizationMaster a, TbiAuthorizationDetail d where a.authorizationId=d.tbiAuthorizationMaster.authorizationId and d.valueName=?1") 
List<TbiAuthorizationMaster> findByValueName(String valueName); 
+0

yup .. это работает! – arch

2

Проблема здесь состоит в том, что вы выбираете в вашем запросе на String и вы присваиваете результат в список ваших TbiAuthorizationMaster объектов.

Итак, вы пытаетесь сделать класс String классом TbiAuthorizationMaster.

У вас есть два варианта здесь:

1. Измените свой запрос, как это так, он будет возвращать весь TbiAuthorizationMaster объект:

@Query("select a from TbiAuthorizationMaster a, TbiAuthorizationDetail d where a.authorizationId=d.tbiAuthorizationMaster.authorizationId and d.valueName=?1") 
List<TbiAuthorizationMaster> findByValueName(String valueName); 

2. Или, чтобы использовать List<String> в результате чтобы соответствовать authorizationName, например:

@Query("select a.authorizationName from TbiAuthorizationMaster a, TbiAuthorizationDetail d where a.authorizationId=d.tbiAuthorizationMaster.authorizationId and d.valueName=?1") 
List<String> findByValueName(String valueName); 
+0

yup u r right .. первый вариант работал для меня :) – arch

+0

Да, вы можете сделать это двумя способами. –

+0

нет, на самом деле 2-й показывал ошибку компиляции – arch

Смежные вопросы