Ошибка использования jfree chart для создания круговой диаграммы из базы данных mysql - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу создать круговую диаграмму, используя диаграмму jfree с данными из базы данных mysql, но, похоже, я получаю ошибки.Вот мой код.

У меня есть LocationRepository, где я реализую свой sql-запрос

   public interface LocationRepository extends JpaRepository<Location, Integer> {

       //hibernate query language (jpql)
       @Query("select type,count(type) from location group by type")
       public List<Object[]> findTypeAndTypeCout();

      }

У меня также есть мой интерфейс ReportUtility следующим образом

   public interface ReportUtil {

      void generatePieChart(String path, List<Object[]> data);

      }

Вот мойКласс реализации ReportUtility

  @Component
  public class ReportUtilImpl implements ReportUtil {

    @Override
    public void generatePieChart(String path, List<Object[]> data) {
    // TODO Auto-generated method stub

    DefaultPieDataset dataset = new DefaultPieDataset();
    for (Object[] objects : data) {
        dataset.setValue(objects[0].toString(), new Double(objects[1].toString()));
    }

    JFreeChart chart = ChartFactory.createPieChart3D("Location Type Report", dataset);

    try {
        ChartUtilities.saveChartAsJPEG(new File(path+"/pieChart.jpeg"), chart, 300, 300);
    } catch (IOException e) {

        e.printStackTrace();
    }
  }

}

Наконец, контроллер

   @Controller
    public class LocationController {

  @Autowired
  LocationService service;

  @Autowired
  LocationRepository repository;

  @Autowired
  ReportUtil reportUtil;

  @Autowired
  ServletContext sc;

  @RequestMapping("/generateReport")
   public String generateReport() {
     String path = sc.getRealPath("/");
     List<Object[]> data = repository.findTypeAndTypeCout();
     reportUtil.generatePieChart(path, data);
     return "report";

        }

     }

Теперь, когда я запускаю это как приложение для загрузки, я получаю следующие ошибки

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'locationController': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'locationServiceImpl': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'locationRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.jimadjei.location.repos.LocationRepository.findTypeAndTypeCout()!
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'locationServiceImpl': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'locationRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.jimadjei.location.repos.LocationRepository.findTypeAndTypeCout()!
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'locationRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.jimadjei.location.repos.LocationRepository.findTypeAndTypeCout()!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.jimadjei.location.repos.LocationRepository.findTypeAndTypeCout()!
    at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
    at org.springframework.data.jpa.repository.query.SimpleJpaQuery.<init>(SimpleJpaQuery.java:62) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: location is not mapped [select type,count(type) from location group by type]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]

1 Ответ

0 голосов
/ 04 февраля 2019

Из-за ошибки не может быть создан компонент LocationRepository.Из вашего кода LocationRepository не доступен весенний МОК.Аннотируйте свой репозиторий с помощью @Repository, поэтому Spring создает компонент.

Обновление ответа согласно комментариям:

Из трассировки стека QuerySyntaxException: location is not mapped, Location сущность не создается.Итак, либо создайте его, либо используйте @Query(nativeQuery=true)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...